找不到Assert.Fail和Assert.Pass或等价物

nae*_*n84 55 .net xunit.net

我曾经在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()      
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 85

该文档包括一个比较图表,包括:

Fail - xUnit.net替代方案: Assert.True(false, "message")

(它没有显示Assert.Pass,我自己从未使用过,但我怀疑替代方案只是从测试中返回.当然,如果你想在嵌套方法调用中抛出它,那就无济于事了.我的怀疑是因为它在NUnit中并不经常使用,因此它在比较图表中不存在.)

  • 是的xUnit可是没有失败()IMO它有点垃圾,使用Assert.True()将意味着你仍然会得到像输出"预期:真实际:假",这是一个有点误导. (8认同)
  • @nashwan:同意。我仍然想念 xUnit 中的许多 NUnit 特性。那好吧 :( (2认同)

Nik*_*Nik 25

xUnit文档Assert.Fail("messsage")建议的替代方法

xUnit.net替代方案:Assert.True(false,“ message”)

有一个缺点-它的输出是

message

Expected: True
Actual:   False
Run Code Online (Sandbox Code Playgroud)

摆脱

Expected: True
Actual:   False
Run Code Online (Sandbox Code Playgroud)

不要叫Assert.True(false, "message")抛出Xunit.Sdk.XunitException
例如,创建类似于以下内容的帮助方法:

public static class MyAssert
{
    public static void Fail(string message)
        => throw new Xunit.Sdk.XunitException(message);
}
Run Code Online (Sandbox Code Playgroud)

  • 在那些罕见的情况下,当有人回答比Jon Skeet更好时... ^^ (3认同)

Ton*_*all 6

只需抛出异常即可满足这两个要求(退出嵌套循环并替换缺少的Assert.Fail方法).唯一的问题是没有合适的基本异常(例如TestException)来使用以避免获得有关使用基本Exception类的警告,因此更像InvalidOperationException的定向可能是一个不错的选择.

  • 至少在 xunit 2.3.1 中有一个合适的异常——`Xunit.Sdk.XunitException`。可能它在早期版本中也可用——我没有检查。看看[我的回答](/sf/answers/3636207011/)了解更多细节。 (3认同)