4 个版本 (2 个重大更新)
0.3.0 | 2020 年 2 月 22 日 |
---|---|
0.2.0 | 2019 年 4 月 12 日 |
0.1.1 | 2018 年 5 月 1 日 |
0.1.0 | 2018 年 5 月 1 日 |
#750 在 测试
20KB
334 行
test_double
一套进程宏,可以在测试时替换为模拟对象、哑对象或其他测试替身。
这并不能解决最初的模拟问题,这值得一看,但它确实允许你轻松地将模拟对象导入到测试中。
使用方法,请将以下内容添加到您的 Cargo.toml
[dependencies]
test_double = "0.3.0"
请注意,此 crate 尚未达到 1.0 版本,因此 API 可能会在发布之间发生变化。
替换单个使用语句
#[test_double]
可以在测试时替换一种类型为另一种类型
#[test_double]
use db::Database;
// Expands to:
#[cfg(not(test))]
use db::Database;
#[cfg(test)]
use db::DatabaseMock as Database;
替换的类型名称默认为原始名称,并在其后面追加 Mock
备用名称
您还可以提供要替换的备用名称
#[test_double(DummyDB)]
use db::Database;
// Expands to:
#[cfg(not(test))]
use db::Database;
#[cfg(test)]
use db::DummyDB as Database;
请注意,这仅在替换单个类型名称时受支持。
前缀
作为快捷方式,如果您想使用原始类型名称,并使用 Mock
作为前缀而不是后缀,可以使用 #[test_double_prefixed]
宏
#[test_double_prefixed]
use db::Database;
// Expands to:
#[cfg(not(test))]
use db::Database;
#[cfg(test)]
use db::MockDatabase as Database;
分组导入
值得注意的是,这些宏还支持分组导入
#[test_double]
use db::{
Database,
Connection
};
// Expands to:
#[cfg(not(test))]
use db::Database;
#[cfg(test)]
use db::DatabaseMock as Database;
#[cfg(not(test))]
use db::Connection;
#[cfg(test)]
use db::ConnectionMock as Connection;
限制
对于 #[test_doubles]
和 #[test_doubles_prefixed]
- 不支持全局导入,例如
use blah::*;
- 当提供替代替换名称时,不支持分组导入,例如
use blah::{foo, bar};
替换多个使用语句
如果您想一次性替换多个使用语句,可以使用 test_doubles!
宏。请注意,此宏不支持使用替代替换名称,但它支持分组导入,例如 use blah::{foo, bar};
test_doubles! {
use db::{
Database,
Connection
};
use image::ImageCache;
}
// Expands to:
#[cfg(not(test))]
use db::Database;
#[cfg(test)]
use db::DatabaseMock as Database;
#[cfg(not(test))]
use db::Connection;
#[cfg(test)]
use db::ConnectionMock as Connection;
#[cfg(not(test))]
use image::ImageCache;
#[cfg(test)]
use image::ImageCacheMock as ImageCache;
前缀
与单个使用语句宏类似,还有一个 test_doubles_prefixed!
宏可以添加前缀而不是追加
test_doubles_prefixed! {
use db::Database;
use image::ImageCache;
}
// Expands to:
#[cfg(not(test))]
use db::Database;
#[cfg(test)]
use db::MockDatabase as Database;
#[cfg(not(test))]
use image::ImageCache;
#[cfg(test)]
use image::MockImageCache as ImageCache;
限制
对于 test_doubles!
和 test_doubles_prefixed!
- 不支持全局导入,例如
use blah::*;
依赖项
~1.5MB
~36K SLoC