期待 JUnit 的异常不起作用
Expecting Exceptions with JUnit doesn't work
我为我的方法编写了一个 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>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
我做错了什么?为什么期望异常不起作用?
public class DMathTest extends TestCase {
^^^^^^^^^^^^^^^^
这可能是错误。 TestCase是JUnit3.xAPI。 JUnit 4.x 测试不再扩展 class,并且可能通过扩展它来改变语义。请删除 extends 子句并重试,否则您的代码看起来是正确的。
此外,在 JUnit 4.x 中,您不再需要使用 "testXyz" 命名约定。方法名可以是任何东西,只要方法是 public 并且用 @Test
注释即可。我通常使用 "should" 方法名称,例如"delimitShouldFailIfMinGtMax"。这使得测试报告更具可读性。
我为我的方法编写了一个 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>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
我做错了什么?为什么期望异常不起作用?
public class DMathTest extends TestCase {
^^^^^^^^^^^^^^^^
这可能是错误。 TestCase是JUnit3.xAPI。 JUnit 4.x 测试不再扩展 class,并且可能通过扩展它来改变语义。请删除 extends 子句并重试,否则您的代码看起来是正确的。
此外,在 JUnit 4.x 中,您不再需要使用 "testXyz" 命名约定。方法名可以是任何东西,只要方法是 public 并且用 @Test
注释即可。我通常使用 "should" 方法名称,例如"delimitShouldFailIfMinGtMax"。这使得测试报告更具可读性。