【发布时间】:2018-04-29 11:11:10
【问题描述】:
我正在为一个类的方法add(T elem, int index) 写一个否定测试。如果index < 0 || index > size || elem == null,该方法预计会抛出IllegalArgumentException。我的测试如下所示:
@Rule
public ExpectedException thrown = ExpectedException.none();
@Test(expected = IllegalArgumentException.class)
public void addNegTest() {
l0.add(42, 10); // index > size
l0.add(42, -1); // index < 0
l0.add(null, 2); // elem == null
}
测试变为绿色,但我发现只需要这 3 行代码中的 1 行即可引发异常,以便测试变为绿色。所以如果我像这样在代码中添加 1 行,测试仍然会变成绿色。
@Test(expected = IllegalArgumentException.class)
public void addNegTest() {
l0.add(42, 10); // index > size
l0.add(42, -1); // index < 0
l0.add(null, 2); // elem == null
l0.add(42, 0); // this is perfectly fine
}
那么我如何确保测试测试是否每一行都抛出异常而不仅仅是一个?
【问题讨论】:
-
您不使用
ExpectedException规则(您可以省略它)。您的代码和异常规则会有一个解决方案,但我更喜欢“每个场景一个测试”的方法(请参阅答案)。
标签: java unit-testing exception junit automated-tests