首页 > 解决方案 > 如何在 Rust 的实现中测试方法

问题描述

我正在尝试增加我的 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())
    }
}

标签: testingmethodsrust

解决方案


是的,这正是您要测试结构方法的方式。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
    }
}

推荐阅读