23 个版本 (4 个重大更新)
使用旧的 Rust 2015
0.9.4 | 2018年2月26日 |
---|---|
0.9.2 | 2017年11月5日 |
0.6.3 | 2017年7月31日 |
0.5.8 | 2017年3月20日 |
0.5.5 | 2016年11月25日 |
#586 in 测试
每月 91 次下载
用于 mockers_macros
42KB
750 行
master | 0.22.0 |
---|---|
Mockers
Rust 的模拟库。支持稳定和夜间 Rust。
灵感来源于 Google Mock C++ 库。
警告:0.22.0 版本中有重大更改,请阅读“最新更新”获取详细信息。
局限性
目前它不是一个功能齐全的模拟库,而只是一个收集反馈的原型。例如,只支持有四个或更少参数的方法,不支持非 'static 生命周期等。
按需添加功能,所以请随时联系我并说明您的需求。
快速使用
这是一段非常简短的介绍,展示可能性和外观。阅读 用户指南 了解详细信息。
为了简单起见,我们将使用夜间 Rust。
对于多 Rust,运行以下命令
$ multirust override nightly
或者如果您使用 rustup
$ rustup override set nightly
Cargo.toml
[dev-dependencies]
mockers = "0.22.0"
mockers_derive = "0.22.0"
src/lib.rs
#![feature(use_extern_macros)]
#[cfg(test)] extern crate mockers_derive;
#[cfg(test)] use mockers_derive::mocked;
#[cfg_attr(test, mocked)]
pub trait AirConditioner {
fn make_hotter(&mut self, by: i16);
fn make_cooler(&mut self, by: i16);
fn get_temperature(&self) -> i16;
}
pub fn set_temperature_20(cond: &mut AirConditioner) {
let t = cond.get_temperature();
if t < 20 {
cond.make_hotter(20 + t);
} else {
cond.make_cooler(t - 20);
}
}
#[cfg(test)]
mod test {
use super::*;
use mockers::Scenario;
#[test]
fn test_set_temperature_20() {
let scenario = Scenario::new();
let (mut cond, cond_handle) = scenario.create_mock_for::<AirConditioner>();
scenario.expect(cond_handle.get_temperature().and_return(16));
scenario.expect(cond_handle.make_hotter(4).and_return(()));
set_temperature_20(&mut cond);
}
}
如果您使用 2018
版本
#[cfg(test)] use mockers_derive::mocked;
#[cfg_attr(test, mocked)]
pub trait AirConditioner {
fn make_hotter(&mut self, by: i16);
fn make_cooler(&mut self, by: i16);
fn get_temperature(&self) -> i16;
}
运行测试
$ cargo test
Compiling air v0.1.0 (file:///Users/kriomant/Temp/air)
Running target/debug/air-b2c5f8b6920cb30a
running 1 test
test test::test_set_temperature_20 ... FAILED
failures:
---- test::test_set_temperature_20 stdout ----
thread 'test::test_set_temperature_20' 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::test_set_temperature_20
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured
error: test failed
许可证
版权 © 2016 Mikhail Trishchenkov
在 MIT 许可证 下分发。
依赖关系
~420KB