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

时间:2013-01-31 17:45:39

标签: .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()      

4 个答案:

答案 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