【发布时间】:2019-12-05 15:08:42
【问题描述】:
有很多教程展示了如何在 Rust 中编写单元测试。我已经阅读了十几本,所有这些都专注于在成功的情况下断言价值。在error 的情况下,情况似乎并不那么简单。默认情况下,错误不会实现 PartialEq 特征,因此您不能使用 assert_eq! 宏。此外,某些函数可能会根据发生的问题类型返回多种错误变体(例如io::Error,可能是不同类型的。)我可以检查是否发生错误,但这似乎还不够。
以下示例。
fn parse_data(input: i32) -> Result<i32, io::Error> {
match input {
0 => Ok(0),
_ => Err(io::Error::new(io::ErrorKind::InvalidData, "unexpected number"))
}
}
#[test]
fn test_parsing_wrong_data() {
let result = parse_data(1);
assert!(result.is_err());
let got = result.unwrap_err();
let want = io::Error::new(io::ErrorKind::InvalidData, "unexpected number");
// compilation error here: binary operation `==` cannot be applied to type `std::io::Error`
assert_eq!(want, got);
}
我认为这不是惯用的方法,因为它没有编译。因此,问题是 - 在类似情况下,什么是适当且惯用的方法?
【问题讨论】:
标签: unit-testing error-handling rust