我曾经在NUnit中使用它们,它们非常有用。知道如何做这样的事情吗?
编辑,代码示例:
bool condition = false;//would be nice not to have this
observable.Subscribe(_ =>
{
if (real test)
condition= true;//Assert.Pass()
});
StartObservable();
Assert.True(condition);//Assert.Fail()
答案 0 :(得分:77)
该文档包含comparison chart,其中包括:
Fail
- xUnit.net替代方案:Assert.True(false, "message")
(它没有显示Assert.Pass
,我自己从未使用过,但我怀疑替代方案只是从测试中返回。当然,如果你想抛出它,这无济于事在嵌套方法调用中。我的怀疑是它在NUnit中不经常使用,因此它在比较图表中不存在。)
答案 1 :(得分:11)
xUnit docs建议的Assert.Fail("messsage")
的替代方式
xUnit.net替代方法:Assert.True(false,“ message”)
有一个缺点-它的输出是
message
Expected: True
Actual: False
摆脱
Expected: True Actual: False
请不要调用Assert.True(false, "message")
抛出Xunit.Sdk.XunitException
。
例如,创建类似于以下内容的辅助方法:
public static class MyAssert
{
public static void Fail(string message)
=> throw new Xunit.Sdk.XunitException(message);
}
答案 2 :(得分:6)
抛出异常以满足两个要求(退出嵌套循环和缺少的Assert.Fail方法的替代方法)。唯一的问题是没有合适的基本异常(例如TestException)来使用以避免获得有关使用基本Exception类的警告,因此更像InvalidOperationException的定向可能是一个不错的选择。
答案 3 :(得分:0)
获取 Pass 断言的另一种方法是创建新断言。
public static class ExtraAssert
{
public static void Pass(this Microsoft.VisualStudio.TestTools.UnitTesting.Assert assert)
{
return;
}
}
但是有一个问题,因为您只能使用“That”关键字访问该方法。
Assert.That.Pass();
参考:https://www.meziantou.net/mstest-v2-create-new-asserts.htm