似乎Fluent Assertions在NUnit的Assert.Multiple
块中不起作用:
Assert.Multiple(() =>
{
1.Should().Be(2);
3.Should().Be(4);
});
运行此代码时,测试在第一次断言后立即失败,因此第二个断言甚至没有执行。
但是,如果我使用NUnit的本机断言,我会得到我想要的结果:
Assert.Multiple(() =>
{
Assert.That(1, Is.EqualTo(2));
Assert.That(3, Is.EqualTo(4));
});
输出包含两个失败的详细信息:
测试失败 - ExampleTest()
消息: 预计:2 但是:1
测试失败 - ExampleTest()
消息: 预计:4 但是:3
如何使用NUnit的Fluent Assertions获得类似的结果?
答案 0 :(得分:6)
我知道我来晚了,但是我相信这正是您想要的:https://fluentassertions.com/documentation/#assertion-scope。
我读过这个问题,想找同样的事情,所以想我会分享。 基本上是这样:
using (new AssertionScope())
{
5.Should().Be(10);
"Actual".Should().Be("Expected");
}
答案 1 :(得分:3)
很抱歉,简短的回答是,您目前无法通过Fluent断言获得相同的结果。 NUnit断言在其中具有特殊逻辑,它们知道它们处于多个断言块中。在这种情况下,他们不会在失败时抛出异常,而是使用父多个断言注册失败,这将在错误完成时报告错误。
Fluent断言需要在内部做同样的事情。这可能就像链接到NUnit断言一样简单,甚至只是调用Assert.Fail。我建议在Fluent断言项目中提出一个问题。如果他们需要有关NUnit内部工作方式的帮助,请随时通过GitHub(@rprouse)将它们指向我。
答案 2 :(得分:0)
您可以:
1:使用AssertionScope
(由@RonaldMcdonald指出):
using (new AssertionScope())
{
(2 + 2).Should().Be(5);
(2 + 2).Should().Be(6);
}
或者:
2。使用FluentAssertions.AssertMultiple NuGet程序包(由我自己创建的微型程序包):
AssertMultiple.Multiple(() =>
{
(2 + 2).Should().Be(5);
(2 + 2).Should().Be(6);
});
而且,当您导入静态成员时:
using static FluentAssertions.AssertMultiple.AssertMultiple;
//...
Multiple(() =>
{
(2 + 2).Should().Be(5);
(2 + 2).Should().Be(6);
});