找不到Assert.Fail和Assert.Pass或等效项


72

我曾经在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()      

Answers:


101

该文档包括一个包含以下内容的比较表

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

(它没有显示Assert.Pass,并且我自己从未使用过它,但是我怀疑替代方法只是从测试中返回。当然,如果您想将其放入嵌套方法调用中,则无济于事。我的怀疑是因为它在NUnit中不是很常用,因此在比较表中不存在。)


参见代码示例(编辑)。请注意,一个选项可以返回,否则我可以使用goto ...:D
naeron84

@ naeron84:说实话,我将只使用您拥有的版本-如果您需要使用可观察变量在多种条件下进行测试,则可以将其全部打包为一个辅助方法,使用起来会更简单比具有Assert.Fail/Pass的版本高。
乔恩·斯基特

13
IMO认为xUnit没有Fail()有点垃圾,使用Assert.True()将意味着您仍然会得到“ Expected:True Actual:False”之类的输出,这有点误导。
bytedev

1
@nashwan:同意。我仍然在xUnit中缺少很多NUnit功能。哦好吧:(
乔恩·斯基特

1
@bytedevthrow new Xunit.Sdk.XunitException(message);摆脱了Expected: True Actual: False。查看我的答案以获取更多详细信息。
Nik

52

xUnit文档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);
}

8
在那些罕见的情况下,当有人的回答比Jon Skeet的更好时... ^^
Igand

是的,但是我们必须采取一种变通方法来模仿Assert.Failmstest中的功能,这是一个遗憾。
meJustAndrew

6

只需抛出一个异常即可满足这两个要求(退出嵌套循环和缺少的Assert.Fail方法的替代方法)。唯一的问题是没有可使用的体面的基本异常(例如TestException),以避免收到有关使用基本Exception类的警告,因此,像InvalidOperationException这样的更有针对性的东西可能是一个不错的选择。


2
至少在xunit 2.3.1中存在适当的例外- Xunit.Sdk.XunitException。可能它也可以在早期版本中使用-我没有检查。查看我的答案以获取更多详细信息。
Nik
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.