如何扩展 Assert.That,Nunit?

问题描述 投票:0回答:1

使用 NUnit 4.2、.NET 8

我可以通过使用

message
中的
Assert.That()
参数在失败时输出我自己的自定义异常消息。当断言失败时会显示此消息。

但是,我正在寻找一种即使断言成功也能输出一些消息的方法。 我的用例是我在一个测试方法中有很多断言。我希望能够跟踪 CI 管道中每个测试方法中断言的内容。

即使成功,

TestContext.Out.WriteLine
也可以输出日志,我想我应该扩展
Assert.That
方法,这样我在每次断言之后就不会出现一堆
TestContext.Out.WriteLines
,但我似乎无法将其实现工作。 (C#技能问题)

[Test]
public void Add_Two_Numbers()
{
    int a = 2, b = 3, c = 4, d = 5;

    int resultAB = a + b;
    int resultCD = c + d;

    Assert.Multiple(() =>
    {
        Assert.That(resultAB, Is.EqualTo(5), message: "Somehow it's not 5", assertDescription: $"Checking if {a}+{b} is equal to 5");
        Assert.That(resultCD, Is.EqualTo(9), message: "Somehow it's not 9", assertDescription: $"Checking if {c}+{d} is equal to 9");
    });
}

问题:

  1. 如何使用新参数扩展
    Assert.That
  2. 有没有办法验证断言是否成功?特别是如果它们是
    Assert.Multiple()
    范围内的,则不会抛出异常。

注意: 将其分解为多个测试方法对于我的特定用例来说不是一个选项。

c# nunit .net-8.0
1个回答
0
投票

Assert
是静态类,无法使用扩展方法进行扩展,因此您无法按照自己的意愿在
Assert
上创建新方法。

但是,你可以做的是定义自己的方法,例如:

public static class AssertExt
{
    public static void ThatAndLog(string logMessage, ...other params)
    {
        TestContext.Out.WriteLine(logMessage); // or use Assert.Pass
        Assert.That(...other params);
    }
}

然后在测试中使用它:

AssertExt.ThatAndLog("log message", resultAB, Is.EqualTo(5));
© www.soinside.com 2019 - 2024. All rights reserved.