C# 断言测试失败就是成功

C# 断言测试失败就是成功,c#,nunit,assert,assertions,C#,Nunit,Assert,Assertions,在nunit测试中,我们是否可以断言,如果测试在特定情况下失败,那么它就是一个通过(即,预期它会尝试并失败) 但在所有其他情况下都应该通过 问题是,测试可能在到达断言部分之前崩溃 我的意思是在 [TestSetup] void init() { if (condition==true) { Assert.That(this test fails); /*any feature to do this?*/ } } 如果考试可能会失败,并且在某些情况下被归类为通过,

在nunit测试中,我们是否可以断言,如果测试在特定情况下失败,那么它就是一个通过(即,预期它会尝试并失败)

但在所有其他情况下都应该通过

问题是,测试可能在到达断言部分之前崩溃

我的意思是在

[TestSetup]
void init()
{
    if (condition==true)
    {
    Assert.That(this test fails); /*any feature to do this?*/
    }
}

如果考试可能会失败,并且在某些情况下被归类为通过,那么这听起来是一个糟糕的考试。将其拆分为单独的测试,并使用清晰的方法名称详细说明它实现了什么

因此,与其有一个测试,并在其中有一个条件,不如将其拆分为每个场景。这样你就可以有一个场景,在这个场景中,它应该在以下情况下失败

// do stuff
bool success = DoStuff();
Assert.IsFalse(success);

你的问题有点难理解。你想强迫失败吗?就像这样

[TestSetup]
public void Init()
{
    if (condition==true)
    {
    Assert.Fail();
    }
}
如果您希望检查失败而不是原因,则应遵循Arran的建议,检查有关正在验证的工作的特定事实,例如方法的返回值。

您还可以使用“Action”对象调用操作中的代码,并在异常时测试该操作。看看FluentAssertions,他们有很多例子

    int number1 = 1;
    int number0 = 0;
    Action someAction = () => { int j = number1 / number0; };
    someAction.ShouldThrow<DivideByZeroException>();
int number1=1;
整数0=0;
Action someAction=()=>{int j=number1/number0;};
someAction.ShouldThrow();

我真的不明白。您是否在测试设置中断言了某些内容?也许试着以身作则。同意。虽然你的答案不是我想要的,但我认为它比我想要的要好。谢谢。我正在寻找类似断言它失败并且不会导致失败的东西。无论如何,我认为我的行动计划是建立在一个动摇的基础上的,可能Arran的建议(检查上面的ANS)是最好的。谢谢