繁体   English   中英

使用 Fluent Assertions 库的多个断言

[英]Multiple assertions using Fluent Assertions library

Fluent Assertions 似乎在 NUnit 的Assert.Multiple块中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

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

我知道我迟到了,但是我相信这正是您要找的: https : //fluentassertions.com/introduction#assertion-scopes

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

using (new AssertionScope())
{
5.Should().Be(10);
"Actual".Should().Be("Expected");
} 

抱歉,简短的回答是您目前无法使用 Fluent 断言获得相同的结果。 NUnit 断言中有特殊的逻辑,知道它们在多个断言块中。 在这种情况下,它们不会在失败时抛出异常,而是向父多重断言注册失败,当它完成时将报告错误。

Fluent 断言需要在内部做同样的事情。 这可能就像链接到 NUnit 断言一样简单,甚至只是调用 Assert.Fail。 我建议向 Fluent 断言项目提交问题。 如果他们需要有关 NUnit 内部工作原理的帮助,请随时在 GitHub (@rprouse) 上将他们指向我。

您可以:

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);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM