3 个不稳定版本
0.2.1 | 2023 年 6 月 1 日 |
---|---|
0.2.0 | 2023 年 6 月 1 日 |
0.1.0 | 2023 年 5 月 30 日 |
#830 在 测试
1,278 每月下载量
在 ocpi-tariffs 中使用
9KB
test-each
基于文件和目录在编译时生成测试。
用法
此 crate 包含三个属性,它们都基于文件通配符模式生成测试。每个属性生成具有不同参数类型的测试。生成的测试将使用文件名的清理版本命名。
文本文件
使用 &'static str
和 test_each::file
接收文件内容。这将忽略任何匹配的目录。
#[test_each::file(glob = "data/*.txt")]
fn test_file(content: &str) {
// check contents
}
如果 data
包含文件 foo.txt
和 bar.txt
,将生成以下代码
#[test]
fn test_file_foo() {
test_file(include_str("data/foo.txt"))
}
#[test]
fn test_file_bar() {
test_file(include_str("data/bar.txt"))
}
二进制文件
使用 &'static [u8]
和 test_each::blob
接收文件内容。这将忽略任何匹配的目录。
#[test_each::blob(glob = "data/*.bin")]
fn test_bytes(content: &[u8]) {
// check contents
}
声明第二个参数以接收文件的路径。
#[test_each::blob(glob = "data/*.bin")]
fn test_bytes(content: &[u8], path: PathBuf) {
// check contents and path
}
文件和目录的路径
使用 PathBuf
和 test_each::path
接收文件路径。这包括任何匹配的目录。
#[test_each::path(glob = "data/*")]
fn test_bytes(path: PathBuf) {
// check path
}
自定义函数名
默认情况下,生成的测试函数名称由没有扩展名的转义文件名组成。使用 name
属性来更改函数名的格式化方式。
使用 name(segments = <n>)
将 n
个路径段(从右到左)添加到名称中。
使用 name(index)
在测试名称的末尾添加一个唯一的索引。这将防止名称冲突。
使用 name(extension)
在测试名称的末尾包含文件扩展名。
/// The generated function name will be `test_file_bar_baz_data_txt_0`
#[test_each::file(glob = "foo/bar/baz/data.txt", name(segments = 3, index, extension))]
fn test_file(_: &str) {}
注意
对已包含文件的任何更改都将正确触发重新编译,但创建一个匹配glob的新文件可能不会导致重新编译。为了解决这个问题,请添加一个生成构建文件,该文件发出 cargo-rerun-if-changed={<glob directories>}
。
依赖
~0.4–0.8MB
~19K SLoC