如何运行仅集成测试?

18

有没有一种方法只运行集成测试而不运行单元测试?

我尝试过:

cargo test --tests:同时运行单元测试和集成测试

cargo test --test test_name:只运行指定的一个测试

目前是否无法仅运行集成测试或者我漏掉了些什么?


我认为这是不可能的。你可以采用一种命名策略,通过特定的模式来命名所有的集成测试,然后使用 cargo test pattern - Dimitris Fasarakis Hilliard
3个回答

29

这应该成为被接受的答案。 - Corel
在使用cargo watch进行测试时,我发现cargo test --test *是有效的。 - RequireKeys
你可以使用 cargo test --test *cargo test --test '*'cargo test --test "*" 来运行集成测试。它们都会产生相同的结果。 - Saurabh
在posix shell中,'*'"*"是相同的,而*(通配符)几乎肯定不会起作用。 - undefined

1
事实上,Cargo 并没有真正区分集成测试和单元测试,因为在管理和实现这两者方面并没有真正的区别;这两者之间的区别纯粹是语义上的。并非所有的代码库都有这种分离。为了简化和避免混淆,该书和参考文献将它们称为单元测试和集成测试,但从技术上讲,其实并没有这样的区别。
Cargo 采用了一个灵活的过滤系统,而不是将测试分为两个逻辑类别,这使得你可以只在测试名称与某个模式匹配时才运行测试。该书有一个专门介绍这个系统的部分。如果您想要过滤掉某些测试,因为它们运行时间很长或者其他原因不适合与其他测试一起运行,可以使用 #[ignore] 注释来标记一个测试。否则,使用特定的命名方法对测试进行命名,以便您可以按名称过滤它们。
该文章还提到,您可以使用Cargo.toml清单中的目标选项来控制在使用--tests时运行什么。Cargo参考页面

1
我想要补充回答。 如果你只需要运行一个集成测试方法(例如 'intergration_test_method'),你可以通过以下命令来实现:
cargo test --test integration_tests 'intergration_test_method' 

cargo test --test integration_tests 'intergration_test_method' -- --nocapture

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