使用 Fluent Assertions 库的多个断言
Multiple assertions using Fluent Assertions library
似乎 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));
});
输出包含两次失败的详细信息:
Test Failed - ExampleTest()
Message:
Expected: 2
But was: 1
Test Failed - ExampleTest()
Message:
Expected: 4
But was: 3
如何使用 Fluent Assertions 和 NUnit 获得相似的结果?
抱歉,简短的回答是您目前无法使用 Fluent 断言获得相同的结果。 NUnit 断言中有特殊的逻辑,知道它们在多个断言块中。在那种情况下,他们不会在失败时抛出异常,而是将失败注册到父多重断言,它将在完成时报告错误。
Fluent assertions 需要在内部做同样的事情。这可能就像链接到 NUnit 断言一样简单,甚至只是调用 Assert.Fail。我建议向 Fluent assertions 项目提出问题。如果他们需要有关 NUnit 内部如何工作的帮助,请随时在 GitHub (@rprouse) 上将他们指向我。
您可以像这样使用 assertion scopes 执行此操作:
using (new AssertionScope())
{
5.Should().Be(10);
"Actual".Should().Be("Expected");
}
您可以:
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);
});
似乎 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));
});
输出包含两次失败的详细信息:
Test Failed - ExampleTest()
Message: Expected: 2 But was: 1
Test Failed - ExampleTest()
Message: Expected: 4 But was: 3
如何使用 Fluent Assertions 和 NUnit 获得相似的结果?
抱歉,简短的回答是您目前无法使用 Fluent 断言获得相同的结果。 NUnit 断言中有特殊的逻辑,知道它们在多个断言块中。在那种情况下,他们不会在失败时抛出异常,而是将失败注册到父多重断言,它将在完成时报告错误。
Fluent assertions 需要在内部做同样的事情。这可能就像链接到 NUnit 断言一样简单,甚至只是调用 Assert.Fail。我建议向 Fluent assertions 项目提出问题。如果他们需要有关 NUnit 内部如何工作的帮助,请随时在 GitHub (@rprouse) 上将他们指向我。
您可以像这样使用 assertion scopes 执行此操作:
using (new AssertionScope())
{
5.Should().Be(10);
"Actual".Should().Be("Expected");
}
您可以:
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);
});