使用 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");
});
}
问题:
Assert.That
。Assert.Multiple()
范围内的,则不会抛出异常。注意: 将其分解为多个测试方法对于我的特定用例来说不是一个选项。
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));