【问题标题】:C# fluent assertions result of check as boolC# fluent 断言检查结果为 bool
【发布时间】:2021-08-27 19:06:30
【问题描述】:

我正在尝试在测试框架之外的 C# 上使用 Fluent Assertions。有什么办法可以将 FA 检查设为 bool 吗?例如,我需要实现以下目标:

bool result= a.Should().Be(0);

如果通过则 result = true; 如果失败,result = false。

有没有办法从断言中转换或提取bool 结果?

【问题讨论】:

  • 您是否有理由要在代码中使用测试框架而不是仅仅编写bool result = a == 0;
  • 嗨格林杰德。这是一种练习,我想在其中显示 concole 测试信息。由于我使用 XUnit 框架进行了测试,其中我使用了 FluertAssertions,因此这是复制所有检查的最简单方法。

标签: c# fluent-assertions


【解决方案1】:

Fluent Assertions 旨在抛出测试框架捕获的异常,而不是返回值。

你能做的最好的事情是创建一个接受动作的方法,并在动作抛出时捕获异常。在catch 中,您将返回false

public bool Evaluate(Action a)
{
    try
    {
        a();
        return true;
    }
    catch
    {
        return false;
    }
}

你会这样使用它:

bool result = Evaluate(() => a.Should().Be(0));

这在负面情况下会有很糟糕的表现;抛出异常并不便宜。你可能会因为exceptions shouldn't be used for flow control而受到其他人的不满。

也就是说,这就是你想要的。

【讨论】:

  • 请注意,当委托自己抛出异常而不是重新抛出异常时,这将返回 false。
  • 是的,这就是 OP 想要的——断言失败时的 false 值。
  • 谢谢,这回答了我的问题。我只是认为它们可能是内置在 Fluent Assertions 中我不知道的机制中。
猜你喜欢
  • 2016-04-25
  • 2022-10-24
  • 2013-09-12
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多