在项目的根目录下创建tests文件夹,与src目录并列。Cargo会自动查找集成测试文件,将每个文件都处理为独立的包。

因为tests 目录下的每一个文件都是一个独立的包,所以我们需要将目标库导入每一个测试包中。

仍然可以在cargo test命令中指定测试函数名称作为参数,来运行特定的集成测试函数。 还可以使用--test 文件名单独运行某个集成测试文件下的所有测试函数。 cargo test --test 集成测试文件名

在集成测试中使用子模块

测试增多的时候,同样希望能够将测试函数按照功能分组。但是tests下的文件管理与src下并不相同

例如提供一个辅助测试模块,不用来测试,而是为了辅助其它测试包测试。不能创建tests/common.rs,因为test下的每个文件都被看作一个单独的包,而是创建tests/common/mod.rs

二进制包的集成测试

如果项目是一个只有src/main.rs,没有src/lib.rs的二进制包,就无法进行集成测试。 也没有办法将/src/main.rs下中的函数使用use导入。 因此Rust中的二进制程序通常将实现逻辑编写在src/lib.rs下,只在src/main.rs下进行简单的调用。

只要核心功能一切正常,src/main.rs中的少量胶水代码就能正常工作,无需测试。