mockiato 0.9.6

A strict, yet friendly mocking library for Rust 2018
Documentation
use mockiato::mockable;

#[mockable]
trait Greeter: GreeterClone {
    fn greet(&self, name: &str) -> String;
}

trait GreeterClone {
    fn clone_box<'a>(&self) -> Box<dyn Greeter + 'a>
    where
        Self: 'a;
}

impl<T> GreeterClone for T
where
    T: Greeter + Clone,
{
    fn clone_box<'a>(&self) -> Box<dyn Greeter + 'a>
    where
        Self: 'a,
    {
        Box::new(self.clone())
    }
}

#[test]
fn cloneable_mocks_work() {
    let name = String::from("Tom");
    let mut greeter = GreeterMock::new();

    greeter
        .expect_greet(|arg| arg.partial_eq(&name))
        .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"));
}