我为我的方法编写了一个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>
我做错了什么?为什么异常的期望不起作用?
答案 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 ;.这样可以获得更易读的测试报告。