55个发布版本

0.23.0 2024年1月5日
0.22.0 2022年11月6日
0.21.0 2019年7月5日
0.13.1 2019年1月20日
0.4.4 2016年7月4日

#128 in 测试

Download history 2/week @ 2024-04-17 10/week @ 2024-04-24 7/week @ 2024-05-01 4/week @ 2024-05-15 17/week @ 2024-05-22 2/week @ 2024-05-29 4/week @ 2024-06-05 4/week @ 2024-06-12 7/week @ 2024-06-19 5/week @ 2024-06-26 193/week @ 2024-07-03 3/week @ 2024-07-17 18/week @ 2024-07-24

217 每月下载量
3 crates 中使用

MIT 许可协议

81KB
2K SLoC

master 0.23.0
Build Status Coverage Status Build Status

Mockers

Rust的模拟库。支持稳定版和nightly版Rust。

灵感来源于C++的Google Mock库。

警告:0.22.0版本中存在破坏性更改,请阅读“新功能”以获取详细信息。

新功能 用户指南

局限性

目前它不是一个功能齐全的模拟库,而只是一个用于收集反馈的原型。例如,只支持四个或更少参数的方法,不支持非-'static 生命周期等。

根据需求添加功能,所以请随时联系我并说明您的需求。

快速使用

这是一个非常简短的介绍,展示可能性和外观。有关详细信息,请参阅用户指南

为了简单起见,我们将在这个例子中使用nightly版Rust。

对于multirust,请运行以下命令

$ multirust override nightly

或者如果您使用rustup

$ rustup override set nightly

Cargo.toml

[dev-dependencies]
mockers = "0.23.0"
mockers_derive = "0.23.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许可协议下分发。

依赖项

~0.5–1MB
~20K SLoC