如何指定NUnit测试失败?
有没有办法指定你想要一个NUnit测试失败,这意味着失败应该被报告为传球并且传球应该被报告为失败?这在测试自己的NUnit扩展时会很有用。这是我想能够做的事情的例子:如何指定NUnit测试失败?
[Test]
[ExpectFail]
public void TypeOf_fail() {
string str = "abc";
str.Should().Be.TypeOf<int>();
}
这并不编译,因为[ExpectFail]是一个虚构的属性来说明什么,我想做的事情,但该方法中的代码工作正常。这个问题是特定于测试NUnit扩展的,因为通常只需轻松编写测试即可通过测试,而不会失败。在这种情况下,您需要证明可以使用正在测试的NUnit扩展来编写失败的测试。
什么Assert.Throws <XXXException>(x.DoSomething());
这里的好处是,如果测试通过(即抛出异常),则返回值是实际的异常本身,然后你就可以查询它,并进一步断言基础上的..
鉴于在这种情况下,你想测试NUnit扩展,我假设,通过使Assert调用函数,你可以Assert.Throws <AssertionException>(...),然后执行上述操作。
我想写一些类似的测试管道代码,我可能反过来需要测试,所以我会让你知道,如果我发现这方面的其他任何东西。
单元测试应该设计成:
他们建立了一些状态
它们运行在测试
方法他们断言,有一件事是正确的测试方法完成
(参考后:单元测试的艺术由罗伊奥谢罗夫)
为什么测试旨在失败的坏事?他们可能以意想不到的方式失败,并且仍然因为失败而被标记为合格。在你的例子中,假设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>();
}
(不知道你正在使用的语法,所以。不是可能需要用正确的语法替换,但情绪持续)。编辑2:如果你想要做的是确保你的Should()方法失败(通过失败一个Assert。方法),那么你想要做的就是捕获Assert的NUnit AssertionException。静态方法抛出。试试这个:
[Test]
[ExpectedException(typeof(AssertionException))]
public void ShouldBeTypeOf_WithInt_Fails() {
string str = "abc";
str.Should().Be.TypeOf<int>();
}
我不喜欢这种解决方案,因为您发布的这些测试都没有证明可以使用扩展来产生失败的测试。 – 2010-12-21 23:24:31
如果你的意思是代码块预期抛出一个异常,测试通过,下面的代码:
[Test]
[ExpectedException(typeOf(Exception))]
public void TypeOf_fail() {
string str = "abc";
str.Should().Be.TypeOf<int>();
}
当然,最具体的异常可能替代例外。
我知道这是旧的文章,但这里是帮助我,使用NUnit:
[TestCase("SomeValidValue")]
[TestCase("{3X5XFX9X-7XCX-4XCX-8X3X-3XAXEX9X0XBX}", ExpectedException = typeof(AssertionException))]
public void GetSpecificConfiguration(string key)
{
Assert.IsNotNull(Config.Instance.GetRecord(key));
}
这种方式让我有相同的测试,有两个预期,一个成功的,和一个失败。
我从来没有看过它,但核心NUnit代码如何测试它的自我以证明测试可能失败? – 2010-12-21 23:42:14