Macro double::mock_trait
[−]
[src]
macro_rules! mock_trait { ($mock_name:ident $(, $method:ident($($arg_type:ty),* ) -> $retval:ty )* ) => { ... }; (pub $mock_name:ident $(, $method:ident($($arg_type:ty),* ) -> $retval:ty )* ) => { ... }; }
Macro that generates a struct
implementation of a specified trait.
This macro generates a struct
that implements the traits Clone
, Debug
and Default
. Create instances of the mock object by calling the struct
's
default()
method.
The struct
has a field for each method of the trait
, which manages their
respective method's behaviour and call expectations. For example, if one
defines a mock like so:
mock_trait!( MockTaskManager, max_threads(()) -> u32, set_max_threads(u32) -> () ); // only here to make `cargo test` happy }
Then the following code is generated:
#[derive(Debug, Clone)] struct MockTaskManager { max_threads: double::Mock<(), u32>, set_max_threads: double::Mock<(u32), ()>, } impl Default for MockTaskManager { fn default() -> Self { MockTaskManager { max_threads: double::Mock::default(), set_max_threads: double::Mock::default(), } } }
Note that just defining this macro is not enough. This macro is used to
generate the necessary boilerplate, but the generated struct does not
implement the desired trait
. To do that, use double
's mock_method
macro.
Examples
trait TaskManager { fn max_threads(&self) -> u32; fn set_max_threads(&mut self, max_threads: u32); } mock_trait!( MockTaskManager, max_threads(()) -> u32, set_max_threads(u32) -> () ); let mock = MockTaskManager::default(); mock.max_threads.return_value(42u32); assert_eq!(42, mock.max_threads.call(())); mock.set_max_threads.call(9001u32); assert!(mock.set_max_threads.called_with(9001u32));