Rust:
Написание тестов
Как это делается:
Rust делает написание тестов простым. Давайте напишем функцию и тест для неё.
Функция:
fn add_two(a: i32) -> i32 {
a + 2
}
Тест:
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_adds_two() {
assert_eq!(4, add_two(2));
}
}
Запуск тестов с помощью cargo test
. Ожидаемый вывод:
Compiling my_crate v0.1.0 (/path/to/my_crate)
Finished test [unoptimized + debuginfo] target(s) in 0.31 сек
Running unittests (target/debug/deps/my_crate-abc123)
running 1 test
test tests::it_adds_two ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Подробнее
Исторически тесты пишутся после написания кода (постфактум). Rust поощряет написание тестов одновременно с кодом или даже до его написания (разработка через тестирование, TDD). Существуют и другие формы тестирования - интеграционные тесты, тесты документации и т. д. - каждая из которых имеет свои уникальные детали реализации.
В Rust тесты обычно пишутся в том же файле или в директории tests/
. Это могут быть модульные тесты (как пример it_adds_two
), интеграционные тесты (в отдельных файлах) или тесты документации (встроенные в комментарии к документации). Компилятор Rust знает, что функции с #[test]
должны быть запущены с помощью cargo test
.
См. также
- Книга о Rust по теме тестирования: https://doc.rust-lang.org/book/ch11-00-testing.html
- Раздел о тестировании в Rust by Example: https://doc.rust-lang.org/stable/rust-by-example/testing.html
- Рекомендации по тестированию API: https://rust-lang.github.io/api-guidelines/documentation.html#crate-provides-docs-including-rustdoc-and-tests-c-dox