Testing 如何在Rust中测试实现内部的方法

Testing 如何在Rust中测试实现内部的方法,testing,methods,rust,Testing,Methods,Rust,我正在尝试增加我的Rust应用程序中的测试覆盖率。我读过很多关于测试公共函数和测试私有函数以及添加“tests”目录以添加集成测试的内容。但是我没有读过任何关于在实现中测试方法的文章。我试过用谷歌搜索一下,但什么也没找到 下面是一个简单的例子,这就是我要实现测试的方式吗 struct Rectangle { width: usize, length: usize, } impl Rectangle { pub fn new(width: usize, length: u

我正在尝试增加我的Rust应用程序中的测试覆盖率。我读过很多关于测试公共函数和测试私有函数以及添加“tests”目录以添加集成测试的内容。但是我没有读过任何关于在实现中测试方法的文章。我试过用谷歌搜索一下,但什么也没找到

下面是一个简单的例子,这就是我要实现测试的方式吗

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())
    }
}

是的,这正是测试struct方法的方法。《铁锈书》有一章称为,其中规定:

单元测试的目的是将每一个代码单元与代码的其余部分隔离开来进行测试,以快速确定代码在何处和未按预期工作。您将在每个文件的src目录中放置单元测试,以及它们正在测试的代码。惯例是在每个文件中创建一个名为
tests
的模块,以包含测试函数,并用
cfg(test)
注释模块

另一种常见的测试组织方法是使用
rustdoc
支持将文档示例作为测试执行。因此,在下面的示例中运行
货物测试
,将导致
区域
功能作为测试执行:

impl矩形{
///“生锈
///使用板条箱::矩形;
///
///让mut rectangle=rectangle::new(4,5);
///断言(20,矩形.area())
/// ```
fn区域(&mut self)->使用{
self.width*self.length
}
}

AFAIK是的。你所做的似乎是一种普通而美好的方式。您还可以在方法上编写doc测试。这将更有组织性,因为一个小测试将与方法位于同一位置。如果您错过了:,那么方法就是一个函数。谢谢@Ibraheem。将模块的所有单元测试移到自己的文件中是否很常见?目前我在文件底部有所有的测试。@Nocker这确实是一个偏好问题。例如,将其大部分单元测试保存在
/tests
目录中。另一方面,ActixWeb则有。约定是在与被测试代码相同的文件中创建名为tests的模块,并且
tests
目录用于单元测试。但是如果你更喜欢分开,那就去吧!