如何运行库测试和文档测试,但不运行集成测试。

15
可以使用命令运行库测试(即)和文档测试,而不运行任何集成测试(即箱子顶层目录中的测试)吗?额外的奖励分数将授予编译集成测试而不运行它们的能力。
这是更大的图片。我的板条箱是一个Web服务的客户端库,HTTP服务器不是板条箱的一部分。我将我的板条箱组织成:
1.图书馆测试,不依赖于HTTP服务器, 2.文档测试,不依赖于HTTP服务器,并且 3.集成测试需要在本地主机上运行HTTP服务器。
因此,在构建板条箱的机器上运行HTTP服务器有时是不可行的,例如Travis CI构建代理。在这些情况下,我想构建所有测试,但排除所有集成测试,因为每个集成测试都会失败。

1
你是否了解用于测试特性的cfg属性#[cfg(feature = "")] - Matthieu M.
@MatthieuM。我之前没有想到过那个。我想这个想法是将所有的集成测试放入它们自己的特性中。例如,cargo test --features integration_tests --no-run && cargo test 来构建所有测试并仅运行库测试和文档测试。然而,这不太方便,我希望有像 cargo test --build-all --lib --doc 这样的命令,它不需要将集成测试标记为特性条件。 - Craig M. Brandenburg
还有一个 ignore 属性。 - ArtemGr
1个回答

12

查看 cargo help test (你可能已经了解):

  • 仅运行库中的测试:cargo test --lib
  • 只运行文档测试:cargo test --doc
  • 构建位于tests/中的测试但不运行它们:cargo test --no-run --test NAME,但需要自己列举它们。 当然,在这里向 Cargo 添加一些内容会更有意义。

与此同时,集成测试是真正作为依赖项使用您的库的单独的 crates。 您可以使用 Cargo.toml 文件和 [dependencies] foo = {path = "…"} 显式地定义它们,以便在主要 crate 上执行无参数的 cargo test 时不会运行它们。


好主意,谢谢!已经有一个开放的Cargo问题可以运行文档测试。此外,我尝试了子包的想法,但在我开发时引入了太多的摩擦。因此,在Cargo获得新选项以仅运行文档测试之前,我的Travis CI构建仅运行--lib测试,并跳过集成测试和文档测试。简而言之,这个问题归结为Cargo获得那个新选项。 - Craig M. Brandenburg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接