5 个版本 (3 个重大更新)
0.4.0 | 2022年4月17日 |
---|---|
0.3.1 | 2022年4月15日 |
0.3.0 | 2022年4月15日 |
0.2.0 | 2022年4月11日 |
0.1.0 | 2022年4月7日 |
#654 在 测试
每月下载量:130
24KB
259 行
Moq
此库提供宏,用于生成实现特质的模拟结构。
[dependencies]
moq = "0.4"
使用示例
#[moq::automock]
trait Trait {
fn func(&self, arg: i64) -> String;
}
#[test]
fn test_ok() {
let mock = TraitMock::new()
.expect_func(|arg: i64| {
assert_eq!(arg, 42);
format!("Hello, {}", arg)
})
.expect_func(|arg: i64| {
assert_eq!(arg, -1);
format!("Hello again, {}", -1)
});
mock.func(42);
mock.func(-1);
}
#[test]
fn test_failed_extra_call() {
let mock = TraitMock::new()
.expect_func(|arg: i64| {
assert_eq!(arg, 42);
format!("Hello, {}", arg)
});
mock.func(42);
mock.func(-1); // Panic here
}
#[test]
fn test_failed_missing_call() {
let mock = TraitMock::new()
.expect_func(|arg: i64| {
assert_eq!(arg, 42);
format!("Hello, {}", arg)
})
.expect_func(|arg: i64| {
assert_eq!(arg, -1);
format!("Hello again, {}", -1)
});
mock.func(42);
// Panic here
}
async_trait
也适用,但主要限制是在 async_trait
之上指定 automock
宏。
#[moq::automock]
#[async_trait::async_trait]
trait Trait {
async fn func(&self, arg: i64) -> String;
}
#[tokio::test]
async fn test_ok() {
let mock = TraitMock::new()
.expect_func(|arg: i64| async {
assert_eq!(arg, 42);
format!("Hello, {}", arg)
});
mock.func(42).await;
}
您可以在 测试 中找到更多示例。
待办事项
- 支持泛型函数
- 支持静态函数
- 宏
moq::mock!(..)
用于生成外部特质的模拟结构 - 为没有特质的结构生成模拟结构
- 在
moq::lambda!
中捕获环境
许可证
许可协议为 Apache 许可协议,版本 2.0 或 MIT 许可协议,您可选择其中之一。除非您明确表示,否则根据 Apache-2.0 许可协议定义,您有意提交的任何贡献,均应双许可如上所述,不附加任何其他条款或条件。
依赖关系
~2MB
~44K SLoC