在NUnit中,如何明确地使测试失败

时间:2011-07-11 05:36:34

标签: nunit

例如下面的代码,

[Test()]
public void Test( )
{
   try{
      GetNumber( );
   }
   catch( Exception ex ){
       /* fail here */
   }

   ...
}

当GetNumber方法抛出异常时,我想失败我的测试。

请告知。

非常感谢。

5 个答案:

答案 0 :(得分:22)

您不需要在try / catch中包装GetNumber()。如果GetNumber()抛出,您的测试将失败。

如果您需要明确地将其失败,请使用Assert.Fail();

答案 1 :(得分:3)

如果GetNumber()返回一个值,则不应该执行您要执行的操作。相反,您应该断言返回值。如果您不希望出现异常,请不要费心检查异常。 NUnit框架会处理这个问题并且无法为您进行测试。

如果GetNumber()没有返回值,您可以执行以下三项操作之一:

  1. 使用Assert.DoesNotThrow - 这非常明确地记录了意图
  2. 正如其他人所建议的那样,您可以选择不捕获异常。测试失败已经被异常发出信号。任何未捕获的异常都将无法通过测试
  3. 如果您有充分的理由让您的逻辑显式失败或通过测试,并且没有其他断言块,您可以使用(更好地记录测试意图的那些),使用Assert.Fail / Assert.Pass
  4. 在这种情况下,第一个选项是最明确的。如果您可以验证的唯一有趣的副作用是抛出异常,这是很常见的。但是如果GetNumber()没有返回值,你应该考虑重命名你的方法:)

答案 2 :(得分:1)

所有测试都应该通过,如果您期望异常,则应使用ExpectedException属性。如果您的代码抛出预期的异常测试将通过。

答案 3 :(得分:1)

Assert.Fail()http://www.nunit.org/index.php?p=utilityAsserts&r=2.2.7

虽然,Assert.NoThrow可能有一个断言,或类似的东西,可以确保你的方法不会抛出。

答案 4 :(得分:0)

[Test()]
public void Test( )
{
    GetNumber();
}

测试失败相当于从中抛出异常。因此,如果您的方法抛出,则测试将失败。