文档测试
在文档注释中,使用 markdown 的代码块可以用来生成文档注释。具体如下:
fn main() {
/// `add_one` 将指定值加1
///
/// # Examples11
///
/// ```
/// let arg = 5;
/// let answer = world_hello::compute::add_one(arg);
///
/// assert_eq!(6, answer);
/// ```
pub fn add_one(x: i32) -> i32 {
x + 1
}
代码注释不必标注语言类型,因为这是 rust 语言。
文档测试中还可以使用 死亡测试 :
/// # Panics
///
/// The function panics if the second argument is zero.
///
/// ```rust,should_panic
/// // panics on division by zero
/// world_hello::compute::div(10, 0);
/// ```
单元测试
在代码中被 #[cfg(test)]
标记的代码表明是测试代码:
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
assert_eq!(2 + 2, 4);
}
}
死亡测试
使用 should_panic
属性可以用来进行死亡测试:
#[cfg(test)]
mod tests {
use super::*;
#[test]
#[should_panic]
fn greater_than_100() {
Guess::new(200);
}
}
私有模块测试
一般而言,测试应当仅覆盖公有函数,但是依赖可以测试私有函数:
#[cfg(test)]
mod tests {
use super::*; (1)
#[test]
fn internal() {
assert_eq!(4, internal_adder(2, 2));
}
}
引入父作用域以调用私有函数。
集成测试
单元测试和源码放在一起,而集成测试则单独放置在项目的 tests 文件夹下。
tests 目录下的测试文件_一般_ 以 _test
结尾,其目录下的所有测试文件都是集成测试文件:
use adder;
#[test]
fn it_adds_two() {
assert_eq!(4, adder::add_two(2));
}
cargo 不会对 tests 目录递归查找。 |