ในบทความนี้ เราจะมาเรียนรู้เกี่ยวกับเครื่องมือทดสอบใน Rust ไม่ว่าจะเป็น Unit Test, Integration Test และ Benchmark ซึ่งช่วยให้โค้ดของเรามีคุณภาพ เชื่อถือได้ และวัดประสิทธิภาพได้อย่างแม่นยำ
Unit Test: ทดสอบแต่ละฟังก์ชัน
Rust มี framework ทดสอบในตัว โดยใช้ annotation #[test] สำหรับฟังก์ชันที่ต้องการทดสอบ
โค้ดตัวอย่าง
fn add(a: i32, b: i32) -> i32 {
a + b
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_add() {
assert_eq!(add(2, 3), 5);
}
#[test]
#[should_panic]
fn test_panic() {
panic!("ทดสอบการ fail");
}
}
รันทดสอบ
cargo test

Integration Test: ทดสอบระบบรวม
ไฟล์ integration test ควรอยู่ใน tests/ directory โดยแยกจากโมดูลหลัก และมักใช้กับ public API
ตัวอย่างโครงสร้าง
my_crate/ ├── src/ │ └── lib.rs ├── tests/ │ └── integration_test.rs
ตัวอย่างไฟล์
// tests/integration_test.rs
use my_crate::add;
#[test]
fn test_add_integration() {
assert_eq!(add(10, 5), 15);
}
การใช้ assert macro
assert_eq!(a, b)– ตรวจสอบว่าค่าเท่ากันassert_ne!(a, b)– ตรวจสอบว่าไม่เท่ากันassert!(condition)– ตรวจสอบ boolean
Benchmark: ทดสอบความเร็ว
ตั้งแต่ Rust 1.36 เป็นต้นมา จำเป็นต้องใช้ external crate เช่น criterion สำหรับ benchmark
เพิ่ม dependency
# Cargo.toml
[dev-dependencies]
criterion = “0.5”
สร้างไฟล์ benchmark
// benches/my_bench.rs
use criterion::{criterion_group, criterion_main, Criterion};
fn fibonacci(n: u64) -> u64 {
match n {
0 => 0,
1 => 1,
_ => fibonacci(n - 1) + fibonacci(n - 2),
}
}
fn bench_fib(c: &mut Criterion) {
c.bench_function("fib 20", |b| b.iter(|| fibonacci(20)));
}
criterion_group!(benches, bench_fib);
criterion_main!(benches);
รัน Benchmark
cargo bench

Mocking และ Testing Async
- ใช้
tokio::testสำหรับ async fn - ใช้ crate เช่น
mockall,httpmockสำหรับ mocking external dependency
#[tokio::test]
async fn test_async_fn() {
let result = my_async_function().await;
assert!(result.is_ok());
}
Best Practices
- แยก unit test กับ integration test อย่างชัดเจน
- เขียน test สำหรับ edge case เสมอ
- ใช้ benchmark สำหรับ logic ที่ซับซ้อนหรือ critical
- ทดสอบ async function ให้ครอบคลุม
สรุป
การเขียน test และ benchmark ที่ดีจะทำให้โค้ดมีคุณภาพสูง และช่วยให้ระบบเติบโตได้อย่างมั่นคง Rust มีเครื่องมือในตัวที่ทรงพลัง และ ecosystem ที่สนับสนุนการทดสอบอย่างครบถ้วน เหมาะสำหรับโปรเจกต์ขนาดเล็กไปจนถึงระบบขนาดใหญ่
บทความโดย poolsawat.com – แชร์ความรู้ Rust และแนวทางการพัฒนา Software คุณภาพ