file:///Users/fliter/rust-in-databend/30-%E7%AC%AC%E4%BA%94%E8%AF%BE-%E5%A6%82%E4%BD%95%E7%BC%96%E5%86%99%E6%B5%8B%E8%AF%951/%E7%AC%AC%E4%BA%94%E8%AF%BE%20%E5%A6%82%E4%BD%95%E7%BC%96%E5%86%99%E6%B5%8B%E8%AF%95.pdf
rustc —test和Cargo test有何区别?我该使用哪一种?
rustc –test 和 cargo test 在Rust单元测试中有以下主要区别:
rustc –test 直接使用 rustc 编译器运行内置于源代码中的单元测试。测试代码必须通过#[cfg(test)]标记声明在源文件中。
cargo test 使用 Cargo 运行单元测试。测试代码可以单独放在 tests/ 目录中,也可以内嵌在源文件中。
使用情况:
对于简单的小项目,直接使用 rustc –test 即可。
对于使用 Cargo 进行构建和管理的大型项目,推荐使用 cargo test :
可以管理测试依赖
可以通过 cargo 将测试代码分离出来
与实际项目编译工作流一致
所以:
小项目,直接使用 rustc –test 便利简单
大项目或日常开发,优先使用 cargo test
两个都是有效的测试方式,可以根据情况选择
即使使用 rustc –test,长期来看还是建议将测试代码独立到 tests/ 目录
总的来说,对于使用 Cargo 的普通项目,推荐使用 cargo test 进行单元测试,它提供了更好的集成测试体验。
可以在一个项目中同时使用rustc –test和cargo test吗?
可以在一个Rust项目中同时使用rustc –test和cargo test来运行单元测试,但是不推荐这样做。
rustc –test 和 cargo test 各自有自己的优势:
rustc –test 测试代码必须内嵌在源文件中,比较简单直接。
cargo test 可以将测试代码单独拆分到tests目录下,与代码分离,更简洁 organized。
同时使用两个测试方式也有一些问题:
会增加维护成本,测试代码分散在不同位置不安全统一。
可能会出现测试代码不一致或重复的情况。
rustc 和 cargo 可能对测试代码有不同的处理,二次运行测试结果也可能不一致。
所以一般来说,同一个项目选择一种统一的测试方式会更好:
小项目可以直接用 rustc –test。
大项目和日常开发使用 cargo test 更推荐。
如果有实际需求想同时使用,可以考虑:
将 rustc –test 看作内部测试,cargo test 作为主要测试。
或者为不同用途的测试代码分别使用两种方式。
但总体来说,选择一种统一的测试方式会让项目测试工作更清晰整洁。不推荐在一个项目中随意混用两种方式。
能给我一些关于使用rustc –test和cargo test的最佳实践吗?
您提出了一个好问题。我给出一些使用rustc –test和cargo test单元测试的最佳实践:
对于小型项目,直接使用rustc –test即可。测试代码可以内嵌在源文件中。
对于中大型项目,使用cargo管理,测试代码建议独立到tests目录。
使用cargo test可以让测试脚本具有更好的可维护性和扩展性。
将测试分为unit测试和集成测试两部分。单测使用cargo test,集成测试另外定义。
每个模块应有对应的测试模块,保持测试代码与生产代码相对独立。
测试函数名最好以test_开头,描述性强,易区分生产代码。
使用#[test]标记定义测试函数。
使用assert!、assert_eq!等宏进行断言,测试功能正确性。
考虑测试边界条件、异常情况。
常见测试环境如mock也单独定义到tests目录。
编写doc comment为测试提供上下文。
自动化运行测试,用GitHub actions等进行连续集成。
定期重构测试代码本身,保持与生产代码同步进展。
跟踪测试覆盖率,追求高代码覆盖。
希望这些建议能给你的测试工作提供一些思路。测试质量很重要,需要长期优化和维护。
原文链接: https://dashen.tech/2023/07/20/Rust之测试/
版权声明: 转载请注明出处.