| master | 0.4.8 |
| ------ | ----- |
|
|
|
Mocking library for Rust.
Inspired by Google Mock library for C++.
[User Guide]
For now it is not a full-featured mocking library, but just a prototype to gather feedback. For example, only methods with four or less arguments are supported, non-'static lifetimes are not supported and so on.
Mocking magic is implemented using compiler plugin, so nightly Rust is required. It was tested to work with 1.14.0-nightly (9c31d76e9 2016-10-03).
This is a very short introduction to show what is possible and how it looks. Read [User Guide] for details.
This library requires nightly Rust.
For multirust, run the following command:
$ multirust override nightly
Or if you're using rustup:
$ rustup override set nightly
Cargo.toml:
```toml [dependencies] mockers_macros = "0.4.8"
[dev-dependencies] mockers = "0.4.8" ```
src/lib.rs:
```rust
pub trait AirConditioner { fn makehotter(&mut self, by: i16); fn makecooler(&mut self, by: i16); fn get_temperature(&self) -> i16; }
pub fn settemperature20(cond: &mut AirConditioner) { let t = cond.gettemperature(); if t < 20 { cond.makehotter(20 + t); } else { cond.make_cooler(t - 20); } }
mod test { use super::*; use mockers::Scenario;
#[test]
fn testsettemperature20() {
let mut scenario = Scenario::new();
let mut cond = scenario.createmock_for::
scenario.expect(cond.get_temperature_call().and_return(16));
scenario.expect(cond.make_hotter_call(4).and_return(()));
set_temperature_20(&mut cond);
} } ```
Run tests:
``` $ cargo test Compiling air v0.1.0 (file:///Users/kriomant/Temp/air) Running target/debug/air-b2c5f8b6920cb30a
running 1 test test test::testsettemperature_20 ... FAILED
failures:
---- test::testsettemperature20 stdout ---- thread 'test::testsettemperature20' panicked at '
error: unexpected call to AirConditioner#0.make_hotter(36)
note: here are active expectations for AirConditioner#0.make_hotter
expectation AirConditioner#0.make_hotter(4)
:
arg #0: 36 is not equal to 4
'
note: Run with RUST_BACKTRACE=1
for a backtrace.
failures: test::testsettemperature_20
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured
error: test failed ```
Copyright © 2016 Mikhail Trishchenkov
Distributed under the MIT License.