Pseudo lets you mock Trait
implementations so that you can track function call arguments and set return values or overrides functions at test time.
Here's a quick example:
```rust extern crate pseudo;
use pseudo::Mock;
trait Foo: Clone { fn expensive_fn(&self, x: i64, y: i64) -> i64; }
struct MockFoo { pub expensive_fn: Mock<(i64, i64), i64>, }
impl Foo for MockFoo { fn expensivefn(&self, x: i64, y: i64) -> i64 { self.expensivefn.call((x + 10, y)) } }
fn doubleexpensivefn
fn doublesreturnvalue() { let mock = MockFoo { expensive_fn: Mock::default() };
mock.expensive_fn.return_value(1000);
assert_eq!(double_expensive_fn(&mock, 1, 2), 2000);
}
fn usescorrectargs() { let mock = MockFoo { expensive_fn: Mock::default() };
assert!(!mock.expensive_fn.called());
double_expensive_fn(&mock, 1, 2);
assert_eq!(mock.expensive_fn.num_calls(), 1);
assert!(mock.expensive_fn.called_with((11, 2)));
} ```
More examples are available in the examples directory.