.net 找不到Assert,失败和Assert,Pass或等效项

ktecyv1j  于 2022-11-26  发布在  .NET
关注(0)|答案(4)|浏览(160)

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

ldioqlga1#

该文档包含一个comparison chart,其中包括:
Fail-xUnit.net替代方法:Assert.True(false, "message")
(It没有显示Assert.Pass,我自己也从来没有用过,但我怀疑另一种选择是从测试中返回。当然,如果你想在嵌套方法调用中抛出它,这是没有帮助的。我的 * 怀疑 * 是它在NUnit中不是很常用,因此它没有出现在比较图中。)

qc6wkl3g

qc6wkl3g2#

xUnit docs建议的Assert.Fail("messsage")替代方案
xUnit.net 替代方案:Assert.True(false,“消息”)
有一个缺点-它的输出是

message

Expected: True
Actual:   False

摆脱

Expected: True
Actual:   False

不要调用Assert.True(false, "message"),而是抛出Xunit.Sdk.XunitException
例如,建立类似下列的Helper方法:

public static class MyAssert
{
    public static void Fail(string message)
        => throw new Xunit.Sdk.XunitException(message);
}
waxmsbnn

waxmsbnn3#

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

unguejic

unguejic4#

另一种获取PassAssert的方法是创建新Assert。

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

相关问题