gpt4 book ai didi

nunit - 你如何指定一个 NUnit 测试应该失败?

转载 作者:行者123 更新时间:2023-12-01 10:11:45 24 4
gpt4 key购买 nike

有没有办法指定您希望 NUnit 测试失败,这意味着失败应报告为通过,而通过应报告为失败?这在测试您自己的 NUnit 扩展时会很有用。这是我希望能够做的事情的一个例子:

[Test]
[ExpectFail]
public void TypeOf_fail() {
string str = "abc";
str.Should().Be.TypeOf<int>();
}

这不会编译,因为 [ExpectFail] 是一个虚构的属性来说明我想要做什么,但该方法中的代码工作正常。此问题特定于测试 NUnit 扩展,因为您通常可以轻松编写测试以通过而不是失败。在这种情况下,您需要证明可以使用您正在测试的 NUnit 扩展编写失败的测试。

最佳答案

应该设计单元测试,以便:
他们设立了一些州
他们运行被测方法
他们断言在被测方法完成后一件事是正确的

(引用:Roy Osherove 的单元测试艺术)

为什么旨在失败的测试是一件坏事?他们可能会以意想不到的方式失败,但仍会因为失败而被标记为通过。在您的示例中,假设 Should()是正在测试的方法(尽管即使不是,这一点仍然存在),您编写上面的测试并将其标记为“预期失败”。它失败。一切安好。几个月后你又回到 Should()并意识到它需要一些重构,所以你改变了它的实现。

现在,在您的示例中,Should()抛出异常,因为您不小心引入了错误。但是您的测试(由于异常而不是逻辑而失败)被标记为应该失败,并且确实如此,因此尽管发生了重大变化,它仍然被标记为通过。

测试应该设计为通过而不是失败,这样如果它以另一种意外的方式失败,您将收到通知。因此,在您的示例中,您应该使用相反的逻辑编写测试:

[Test]
public void TypeOf_ShouldBeString() {
string str = "abc";
str.Should().Be.TypeOf<string>();
}

或者:
[Test]
public void TypeOf_ShouldNotBeInt() {
string str = "abc";
str.Should().Not.Be.TypeOf<int>();
}

(不确定您正在使用的语法,因此 .Not 可能需要用正确的语法替换,但情绪成立)。

Edit2:如果您要做的是确保您的 Should() 方法失败(通过使 Assert. 方法失败),那么您想要做的是捕获 Assert 的 NUnit AssertionException。静态方法抛出。尝试这个:
[Test]
[ExpectedException(typeof(AssertionException))]
public void ShouldBeTypeOf_WithInt_Fails() {
string str = "abc";
str.Should().Be.TypeOf<int>();
}

关于nunit - 你如何指定一个 NUnit 测试应该失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4503539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com