testing - 如何在 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())
}
}
解决方案
是的,这正是您要测试结构方法的方式。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
}
}
推荐阅读
- github - 在 Slack 上使用 Github App 取消订阅回购
- elasticsearch - 弹性搜索未返回附近输入日期的记录
- spring - Feign客户端日志级别干预pdf二进制内容
- r - 计算字母到数字和数字到字母的转换
- python - 删除 0 并在 pandas 的每个数字中添加“”
- angular - 角度多点滑块的建议
- javascript - 使用此代码,我将如何在 JavaScript 中为精灵设置动画以在屏幕上闪烁 2 种不同颜色?或者更确切地说,我将如何解决它?
- javascript - 导航标签在点击时不会改变
- jestjs - 扩展全局测试对象
- amibroker - 3较低的低点条件