C# fluent 断言检查结果为 bool
Posted
技术标签:
【中文标题】C# fluent 断言检查结果为 bool【英文标题】:C# fluent assertions result of check as 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,因此这是复制所有检查的最简单方法。
【参考方案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 中我不知道的机制中。以上是关于C# fluent 断言检查结果为 bool的主要内容,如果未能解决你的问题,请参考以下文章