我的用例非常简单--如果一个实际对象不是OK变量,我希望这个测试显式失败,显示它所包含的内容:

fn test_foo() {
  let actual = fn_that_returns_result();

  // not verbose enough in case it is actually an Err:
  // assert!(res.is_ok());
}

我不能在这里做一个准确的比较,因为OK变量的内部状态是动态的.

下面的方法很管用,但我想知道它是不是很好,或者也许有一个更惯用的解决方案?

fn test_foo() {
  let actual = fn_that_returns_result();

  match res {
    Ok(_) => {},
    Err(err) => panic!("{}", err) // anyhow::Error
  }
}

更新:为了清楚起见,我希望原始错误保持不变,不要在Assert中被覆盖(因此不能使用.expect或通过assert!的第二个参数覆盖它)

推荐答案

在铁 rust 测试中,当测试达到panic%时,测试被认为是失败的.事实上,这就是像assert!这样的宏在幕后所做的所有事情:判断一个条件,如果条件不满足,就会发出错误消息.

Result包括像unwrapexpect这样的方法,如果持有Err变体,这两个方法都会死机,并将错误值作为消息,因此将使您的测试失败.

Rust相关问答推荐

为什么是!为Rust中的RwLockReadGuard和RwLockWriteGuard实现的发送特征?

什么是谓词的简短和简洁类型

Rust中的相互递归特性与默认实现

为什么`Vec i64`的和不知道是`Option i64`?

如何实现泛型枚举的`Serde::Desialize`特性

Rust&;Tokio:如何处理更多的信号,而不仅仅是SIGINT,即SIGQUE?

为什么';t std::cell::ref使用引用而不是非空?

正则表达式中的重叠匹配?(铁 rust 正则式发动机)

为什么TcpListener的文件描述符和生成的TcpStream不同?

如何从ruust中的fig.toml中读取?

Tokio';s io::用Cursor拆分<;Vec<;u8>>;赢得';t get the full writted data

Rust 中的复合 `HashSet` 操作或如何在 Rust 中获得 `HashSet` 的显式差异/并集

返回迭代器考虑静态生命周期类型

Rust中如何实现一个与Sized相反的负特性(Unsized)

实现泛型的 Trait 方法中的文字

std::vector::shrink_to_fit 如何在 Rust 中工作?

一个函数调用会产生双重borrow 错误,而另一个则不会

如何创建递归borrow 其父/创建者的 struct ?

匹配结果时的简洁日志(log)记录

如何在 Rust 的泛型函​​数中同时使用非拥有迭代器和消费迭代器?