Unit testing 将特定测试编译成二进制

Unit testing 将特定测试编译成二进制,unit-testing,testing,rust,rust-cargo,Unit Testing,Testing,Rust,Rust Cargo,我想编译一个二进制文件来运行特定的测试子集。当我运行以下命令时,它会工作: ubuntu@ubuntu-xenial:/ox$货物测试哈希::vec 在0.11秒内完成开发[未优化+调试信息]目标 运行target/debug/deps/ox-824a031ff1732165 运行9个测试 测试哈希::向量::测试哈希\u条目::测试获取\u偏移量\u墓碑。。。好啊 测试散列::向量::测试散列项::测试获取偏移量值。。。好啊 测试哈希::向量::测试哈希表::测试删除。。。好啊 测试哈希::向

我想编译一个二进制文件来运行特定的测试子集。当我运行以下命令时,它会工作:

ubuntu@ubuntu-xenial:/ox$货物测试哈希::vec
在0.11秒内完成开发[未优化+调试信息]目标
运行target/debug/deps/ox-824a031ff1732165
运行9个测试
测试哈希::向量::测试哈希\u条目::测试获取\u偏移量\u墓碑。。。好啊
测试散列::向量::测试散列项::测试获取偏移量值。。。好啊
测试哈希::向量::测试哈希表::测试删除。。。好啊
测试哈希::向量::测试哈希表::测试删除和设置。。。好啊
测试哈希::向量::测试哈希表::测试从哈希中获取。。。好啊
测试哈希::vec::测试哈希表::测试从哈希中获取非存在项。。。好啊
测试哈希::向量::测试哈希表::测试哈希覆盖。。。好啊
测试哈希::向量::测试哈希表::测试增长哈希。。。好啊
测试哈希::vec::测试哈希表::在填充\u逻辑删除后测试集\u。。。好啊
测试结果:可以。9人通过;0失败;忽略0;0测量值;8过滤掉
当我尝试运行
target/debug/deps/ox-824a031ff1732165
时,它会运行我的所有测试,而不仅仅是
hash::vec
中指定的9个测试

我试图运行
c--testhash::vec
,但我得到了
错误:名为
hash::vec
c--test
的测试目标不起作用,但会创建一个运行所有测试的二进制文件。如果我尝试
c--test hash::vec`,我会得到:

编译ox v0.1.0(file:///ox)
错误:提供了多个输入文件名
错误:无法编译“ox”。

c-h
说你可以通过
--test
标志(
--test NAME只构建指定的测试目标
),所以我想知道“NAME”是什么以及如何传递它,所以我得到一个二进制文件,它只运行
hash::vec
中指定的9个测试,你不能,至少不是直接的

货物测试hash::vec
的情况下,
hash::vec
只是在执行测试运行程序时与每个测试函数的完整路径匹配的子字符串。也就是说,它完全不影响编译哪些测试,只影响运行哪些测试。事实上,这个参数被传递给测试运行程序本身;Cargo甚至不能解释它本身

--测试名称
的情况下,
名称
是测试源的名称。与中一样,通过
--test blah
告诉Cargo在
tests/blah.rs
中构建和运行测试。它与
--bin NAME
(对于
src/bin/NAME.rs
)和
--example NAME
(对于
examples/NAME.rs
)的参数类型相同


如果您真的只想编译特定的测试子集,我能想到的唯一方法就是通过特性使用条件编译。对于要启用/禁用的每个测试子集,您都需要一个包功能。

您不能,至少不能直接启用

货物测试hash::vec
的情况下,
hash::vec
只是在执行测试运行程序时与每个测试函数的完整路径匹配的子字符串。也就是说,它完全不影响编译哪些测试,只影响运行哪些测试。事实上,这个参数被传递给测试运行程序本身;Cargo甚至不能解释它本身

--测试名称
的情况下,
名称
是测试源的名称。与中一样,通过
--test blah
告诉Cargo在
tests/blah.rs
中构建和运行测试。它与
--bin NAME
(对于
src/bin/NAME.rs
)和
--example NAME
(对于
examples/NAME.rs
)的参数类型相同


如果您真的只想编译特定的测试子集,我能想到的唯一方法就是通过特性使用条件编译。对于要启用/禁用的每个测试子集,您都需要一个包功能。

啊,好的,这实际上回答了我的问题。我真正需要做的就是运行我的测试子集(我正在尝试运行valgrind来检测内存泄漏)。将hash::vec传递到二进制文件正是我所需要的。谢谢啊,好吧,这实际上回答了我的问题。我真正需要做的就是运行我的测试子集(我正在尝试运行valgrind来检测内存泄漏)。将hash::vec传递到二进制文件正是我所需要的。谢谢