rust 货物测试依赖示例

arknldoa  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(118)

我有一个带有示例的Rust库,我想用这个示例作为验证库代码的间接方法进行测试。
我想使用assert_cmd(如this tutorial中所述)来执行测试,但是我无法以cargo testcargo test --example ...也将构建和更新示例二进制文件的方式构建它。
测试运行了,但通常是用示例二进制文件的旧版本运行的。示例项目也被构建了,我知道这一点是因为如果我在代码中添加compile_error!,它将不允许我运行测试。但由于某种原因,Command::cargo_bin(...)执行的二进制文件没有更新。
是否有一些我遗漏的配置可以用来说服cargo重新构建示例二进制文件?
下面是我的目录结构:

project-dir
  - examples
    - example_one
      - main.rs
      - test.rs
  - src
    - lib.rs
  - Cargo.toml
3pvhb19x

3pvhb19x1#

以下是IRLO的一个主题,讨论了运行cargo testcargo test --examples时无法构建示例的问题:https://internals.rust-lang.org/t/examples-and-tests/14347。引用自此主题:
不幸的是,对于自动化测试示例程序来说,并没有一个好的故事。这些示例并不能保证是为集成测试而构建的。
也就是说,assert_cmd的文档中有这一节介绍了它的局限性。
仅适用于货物二进制文件(货物测试确保它们被构建)。
现在您面临的问题是cargo test不能确保构建了示例。
assert_cmd建议您在遇到其限制时使用escargot,它具有更灵活的API。AFAICT您可以像这样使用escargot来构建和运行一个示例(请参阅此处的文档):

extern crate escargot;

escargot::CargoBuild::new()
    .example("example_fixture")
    .manifest_path("tests/fixtures/example/Cargo.toml")
    .exec()
    .unwrap();

我希望这将允许您正确地测试您的示例。

相关问题