首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Fluent断言库的多个断言

使用Fluent断言库的多个断言
EN

Stack Overflow用户
提问于 2017-08-30 00:00:43
回答 3查看 10.2K关注 0票数 24

在NUnit的Assert.Multiple块中,流畅的断言似乎不起作用:

代码语言:javascript
复制
Assert.Multiple(() =>
    {
        1.Should().Be(2);
        3.Should().Be(4);
    });

当运行此代码时,测试将在第一个断言之后立即失败,因此甚至不会执行第二个断言。

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

代码语言:javascript
复制
Assert.Multiple(() =>
    {
        Assert.That(1, Is.EqualTo(2));
        Assert.That(3, Is.EqualTo(4));
    });

输出包含关于这两种故障的详细信息:

测试失败- ExampleTest() 消息:预期:2,但原:1 测试失败- ExampleTest() 消息:预期:4,但原:3

如何使用使用NUnit的流利断言获得类似的结果?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-20 09:34:57

您可以使用这样的断言范围来完成这个任务:

代码语言:javascript
复制
using (new AssertionScope())
{
    5.Should().Be(10);
    "Actual".Should().Be("Expected");
}
票数 45
EN

Stack Overflow用户

发布于 2019-11-07 09:07:39

你可以:

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

代码语言:javascript
复制
using (new AssertionScope())
{
  (2 + 2).Should().Be(5);
  (2 + 2).Should().Be(6);
}

或者:

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

代码语言:javascript
复制
AssertMultiple.Multiple(() =>
{
    (2 + 2).Should().Be(5);
    (2 + 2).Should().Be(6);
});

当您导入静态成员时:

代码语言:javascript
复制
using static FluentAssertions.AssertMultiple.AssertMultiple;

//...

Multiple(() =>
{
    (2 + 2).Should().Be(5);
    (2 + 2).Should().Be(6);
});
票数 7
EN

Stack Overflow用户

发布于 2017-08-30 00:43:40

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45949961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档