# mockall_double A double test adapter that works well with Mockall. [![Build Status](https://api.cirrus-ci.com/github/asomers/mockall.svg)](https://cirrus-ci.com/github/asomers/mockall) [![Crates.io](https://img.shields.io/crates/v/mockall_double.svg)](https://crates.io/crates/mockall_double) [![Documentation](https://docs.rs/mockall_double/badge.svg)](https://docs.rs/mockall_double) ## Overview Mockall can easily create a mock version of a struct. But how does one convince the code under test to use the mock struct instead of the real one? In Rust, it's necessary to replace the real struct at compile time. That's very easy to do with a few `#[cfg(test)]` statements. But mockall_double makes it even easier. ## Usage Typically `mockall` is only used by unit tests, so it can be a dev-dependency. But `mockall_double` must be a full dependency. To use it this way, add this to your `Cargo.toml`: ```toml [dependencies] mockall_double = "0.3.1" [dev-dependencies] mockall = "0.12.0" ``` Then use it like this: ```rust use mockall_double::double; mod mockable { #[cfg(test)] use mockall::automock; pub struct Foo {} #[cfg_attr(test, automock)] impl Foo { pub fn foo(&self, x: u32) -> u32 { // ... 0 } } } #[double] use mockable::Foo; fn bar(f: Foo) -> u32 { f.foo(42) } #[cfg(test)] mod tests { use super::*; #[test] fn bar_test() { let mut mock = Foo::new(); mock.expect_foo() .returning(|x| x + 1); assert_eq!(43, bar(mock)); } } ``` See the [API docs](https://docs.rs/mockall_double) for more information. # Minimum Supported Rust Version (MSRV) `mockall_double` is tested with the same MSRV as Mockall itself. Currently, that's Rust 1.42.0. `mockall_double`'s MSRV will not be changed in the future without bumping the major or minor version. # License `mockall_double` is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0). See LICENSE-APACHE, and LICENSE-MIT for details # Acknowledgements `mockall_double` is inspired by Jason Grlicky's [double](https://crates.io/crates/double) crate, but tweaked to work better with Mockall's naming conventions.