期待JUnit的异常并不起作用

时间:2017-03-06 09:51:15

标签: java junit junit4

我为我的方法编写了一个JUnit测试 这是我的方法:

   public static int delimit(int value, int min, int max) throws IllegalArgumentException {
      if (min > max)
         throw new IllegalArgumentException("Min value was greater than max value.");

      return Math.min(max, Math.max(min, value));
   }

这是测试:

   public class DMathTest extends TestCase {
   @Rule
   public ExpectedException exception = ExpectedException.none();

   @Test
   public void testDelimit() {
      ...

      exception.expect(IllegalArgumentException.class);
      DMath.delimit(1, 3, 2);
   }

}

确实抛出IllegalArgumentException,但JUnit将其标记为测试中的错误。它告诉我测试失败,因为(预期)异常。没有AssertionError或任何东西,它只显示我的IllegalArgumentException,好像整个期望代码都没有。 然后我删除了规则和所有期望代码,结果完全相同(当然,这应该是这样的)。所以规则和电话

exception.expect(IllegalArgumentException.class);

没有做任何事 我正在使用Eclipse,我使用Maven包含JUnit。 dependency元素如下所示:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

我做错了什么?为什么异常的期望不起作用?

1 个答案:

答案 0 :(得分:3)

fib3(n)

这可能是错误。 TestCase是JUnit 3.x API。 JUnit 4.x测试不再扩展该类,并且可能通过扩展它来改变语义。请删除extends子句并重试,否则,您的代码看起来是正确的。

此外,在JUnit 4.x中,您不再需要使用&#34; testXyz&#34;命名惯例。方法名称可以是任何内容,只要该方法是公共的并使用public class DMathTest extends TestCase { ^^^^^^^^^^^^^^^^ 注释即可。我通常会选择&#34;应该&#34;方法名称,例如&#34; delimitShouldFailIfMinGtMax&#34 ;.这样可以获得更易读的测试报告。