use mockiato::mockable; #[mockable(static_references)] trait Greeter: GreeterClone { fn greet(&self, name: &str) -> String; } /// See: trait GreeterClone { fn clone_box(&self) -> Box; } impl GreeterClone for T where T: Greeter + Clone + 'static, { fn clone_box(&self) -> Box { Box::new(self.clone()) } } fn main() { let mut greeter = GreeterMock::new(); greeter .expect_greet(|arg| arg.partial_eq("Tom")) .times(2) .returns(String::from("Hello Tom")); assert_eq!("Hello Tom", greeter.greet("Tom")); { let greeter_clone = greeter.clone_box(); assert_eq!("Hello Tom", greeter_clone.greet("Tom")); } assert_eq!("Hello Tom", greeter.greet("Tom")); }