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

Noc*_*ker 5 testing methods rust

我正在尝试增加 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())
    }
}
Run Code Online (Sandbox Code Playgroud)

Ibr*_*med 5

是的,这正是测试结构方法的方式。Rust 书中有一章称为“测试组织”,其中指出:

\n
\n

单元测试的目的是独立于其余代码来测试每个代码单元,以快速查明代码在何处\xe2\x80\x99 未按预期工作。您\xe2\x80\x99 将使用它们\xe2\x80\x99 正在测试的代码将单元测试放在每个文件的src目录中。约定是tests在每个文件中创建一个命名的模块来包含测试函数并用cfg(test).

\n
\n

另一种常见的测试组织方法是使用文档测试rustdoc支持将文档示例作为测试执行。因此,运行cargo test下面的示例将导致该area函数作为测试执行:

\n
impl Rectangle {\n    /// ```rust\n    /// use crate::Rectangle;\n    ///\n    /// let mut rectangle = Rectangle::new(4, 5);\n    /// assert_eq!(20, rectangle.area())\n    /// ```\n    fn area(&mut self) -> usize {\n        self.width * self.length\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n