我正在努力提高Rust应用程序的测试覆盖率。我读过很多关于测试公共函数和测试私有函数的文章;测试";目录,以便添加集成测试。但我没有读过任何关于在实现中测试方法的内容。我试过在谷歌上搜索一下,但什么也没找到。
这里有一个简单的例子,这就是我想要实现测试的方式吗?
struct Rectangle {
width: usize,
length: usize,
}
impl Rectangle {
pub fn new(width: usize, length: usize) -> Rectangle {
Rectangle {
width,
length,
}
}
fn area(&mut self) -> usize {
self.width * self.length
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_rectangle() {
let mut rectangle = Rectangle::new(4, 5);
assert_eq!(20, rectangle.area())
}
}
是的,这正是测试结构方法的方式。Rust的书中有一章叫做测试组织,其中写道:
单元测试的目的是将每个代码单元与代码的其余部分隔离开来进行测试,以快速确定代码的工作位置和不工作位置。您将把单元测试和它们正在测试的代码放在每个文件的src目录中。约定是在每个文件中创建一个名为
tests
的模块,以包含测试函数并用cfg(test)
对模块进行注释。
另一种常见的测试组织方法是使用文档测试。rustdoc
支持将文档示例作为测试执行。因此,在下面的示例中运行cargo test
会导致area
函数作为测试执行:
impl Rectangle {
/// ```rust
/// use crate::Rectangle;
///
/// let mut rectangle = Rectangle::new(4, 5);
/// assert_eq!(20, rectangle.area())
/// ```
fn area(&mut self) -> usize {
self.width * self.length
}
}