77

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

4 回答 4

108

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

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

(它没有显示Assert.Pass,我自己也从未使用过,但我怀疑替代方法只是从测试中返回。当然,如果你想将它扔到嵌套方法调用中,那也无济于事。我的怀疑是它在 NUnit 中不是很常用,因此在比较图中没有。)

于 2013-01-31T17:48:59.573 回答
61

xUnit docsAssert.Fail("messsage")建议的替代方案

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

有一个缺点——它的输出是

message

Expected: True
Actual:   False

摆脱

Expected: True
Actual:   False

不要调用Assert.True(false, "message")throw Xunit.Sdk.XunitException
例如,创建一个类似这样的辅助方法:

public static class MyAssert
{
    public static void Fail(string message)
        => throw new Xunit.Sdk.XunitException(message);
}
于 2018-08-21T09:39:46.900 回答
6

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

于 2013-11-12T14:05:35.017 回答
0

获取 Pass 断言的另一种方法是创建新的断言。

public static class ExtraAssert
{
    public static void Pass(this Microsoft.VisualStudio.TestTools.UnitTesting.Assert assert)
    {
        return;
    }
 }

但是有一个问题,因为您只能使用“那个”关键字访问该方法。

Assert.That.Pass();

参考:https ://www.meziantou.net/mstest-v2-create-new-asserts.htm

于 2021-01-20T03:05:22.797 回答