我有一个带有示例的Rust库,我想用这个示例作为验证库代码的间接方法进行测试。
我想使用assert_cmd
(如this tutorial中所述)来执行测试,但是我无法以cargo test
或cargo test --example ...
也将构建和更新示例二进制文件的方式构建它。
测试运行了,但通常是用示例二进制文件的旧版本运行的。示例项目也被构建了,我知道这一点是因为如果我在代码中添加compile_error!
,它将不允许我运行测试。但由于某种原因,Command::cargo_bin(...)
执行的二进制文件没有更新。
是否有一些我遗漏的配置可以用来说服cargo重新构建示例二进制文件?
下面是我的目录结构:
project-dir
- examples
- example_one
- main.rs
- test.rs
- src
- lib.rs
- Cargo.toml
1条答案
按热度按时间3pvhb19x1#
以下是IRLO的一个主题,讨论了运行
cargo test
或cargo test --examples
时无法构建示例的问题:https://internals.rust-lang.org/t/examples-and-tests/14347。引用自此主题:不幸的是,对于自动化测试示例程序来说,并没有一个好的故事。这些示例并不能保证是为集成测试而构建的。
也就是说,
assert_cmd
的文档中有这一节介绍了它的局限性。仅适用于货物二进制文件(货物测试确保它们被构建)。
现在您面临的问题是
cargo test
不能确保构建了示例。assert_cmd
建议您在遇到其限制时使用escargot
,它具有更灵活的API。AFAICT您可以像这样使用escargot
来构建和运行一个示例(请参阅此处的文档):我希望这将允许您正确地测试您的示例。