Rust 学习笔记 17:自动化测试 (Automated Testing)
Rust 学习笔记 17:自动化测试 (Automated Testing) “Program testing can be a very effective way to show the presence of bugs, but it is hopelessly inadequate for showing their absence.” – Edsger W. Dijkstra 在 Go 中,我们创建 _test.go 文件,写 func TestXxx(t *testing.T)。 在 Rust 中,测试是一等公民。你不需要特殊的目录结构(单元测试),也不需要额外的测试框架。 1. 单元测试 (Unit Tests) 按照惯例,Rust 的单元测试直接写在源代码文件中,通常放在底部的 tests 模块里。 1// src/lib.rs 2 3fn add(a: i32, b: i32) -> i32 { 4 a + b 5} 6 7#[cfg(test)] 8mod tests { 9 use super::*; // 引入父模块的所有内容 10 11 #[test] 12 fn it_works() { 13 assert_eq!(add(2, 2), 4); 14 } 15} #[cfg(test)]:告诉编译器,只有在运行 cargo test 时才编译这个模块。生成的二进制文件不会包含这些测试代码,零空间开销。 #[test]:标记一个函数为测试函数。 assert_eq! / assert!:断言宏。 2. 测试私有函数 Rust 的单元测试允许测试私有函数!这是很多语言做不到的(Java 需要反射或放宽可见性)。 因为测试模块就定义在源码文件内部,且是子模块,它天然拥有访问父模块私有内容的权限。 ...