使用Fluent Assertions库的多个断言

YMM*_*YMM 5 c# nunit assertions fluent-assertions nunit-3.0

似乎Fluent Assertions在NUnit的Assert.Multiple块中不起作用:

Assert.Multiple(() =>
    {
        1.Should().Be(2);
        3.Should().Be(4);
    });
Run Code Online (Sandbox Code Playgroud)

运行此代码时,测试在第一次断言后立即失败,因此第二个断言甚至没有执行.

但是,如果我使用NUnit的本机断言,我会得到我想要的结果:

Assert.Multiple(() =>
    {
        Assert.That(1, Is.EqualTo(2));
        Assert.That(3, Is.EqualTo(4));
    });
Run Code Online (Sandbox Code Playgroud)

输出包含两个故障的详细信息:

测试失败 - ExampleTest()

消息:预期:2但是:1

测试失败 - ExampleTest()

消息:预期:4但是:3

如何使用NUnit的Fluent Assertions获得类似的结果?

Ron*_*ald 17

我知道我迟到了,但我相信这正是你所寻找的:https://fluentassertions.com/documentation/#assertion-scope.

我读这个问题寻找同样的事情,所以我想我会分享它.基本上这个:

using (new AssertionScope())
{
5.Should().Be(10);
"Actual".Should().Be("Expected");
} 
Run Code Online (Sandbox Code Playgroud)


Dar*_*iak 10

您可以:

1:使用AssertionScope(如@RonaldMcdonald指出的):

using (new AssertionScope())
{
  (2 + 2).Should().Be(5);
  (2 + 2).Should().Be(6);
}
Run Code Online (Sandbox Code Playgroud)

或者:

2.使用FluentAssertions.AssertMultiple NuGet包(我自己创建的小包):

AssertMultiple.Multiple(() =>
{
    (2 + 2).Should().Be(5);
    (2 + 2).Should().Be(6);
});
Run Code Online (Sandbox Code Playgroud)

并且,当您导入静态成员时:

using static FluentAssertions.AssertMultiple.AssertMultiple;

//...

Multiple(() =>
{
    (2 + 2).Should().Be(5);
    (2 + 2).Should().Be(6);
});
Run Code Online (Sandbox Code Playgroud)