在JUnit 4中以相同的测试方法使用多个参数测试相同的异常

时间:2019-02-09 18:06:25

标签: java exception junit junit4

我有一个检查空参数的方法,如果有空则抛出void CSimple::OnFinalRelease() { if (m_hWnd != NULL) DestroyWindow(); else PostNcDestroy(); // add this ... }

IllegalStateException

在JUnit4中,我已经创建了三种单独的测试方法来涵盖所有可能性:public V put(K key, V value) { if (key == null || value == null) { throw new IllegalStateException(); } ..... } put(key, null)put(null, value)

put(null, null)

它可以按预期工作,但是问题在于它相当繁琐且冗长。如果我尝试将它们归类为一种这样的方法,那么Eclipse会告诉我缺少一些内容:

@Test(expected = IllegalStateException.class)
public void testPutThrowsIllegalStateException1() {
    llmm.put("A", null);
}

@Test(expected = IllegalStateException.class)
public void testPutThrowsIllegalStateException2() {
    llmm.put(null, 1);
}

@Test(expected = IllegalStateException.class)
public void testPutThrowsIllegalStateException3() {
    llmm.put(null, null);
}

有没有一种更快的方法可以将所有3种方法归为1种?

1 个答案:

答案 0 :(得分:3)

您的唯一测试在执行第一行后就失败了,因此其他两个也从不执行。

进行3次(或仅2次)测试就可以了。

另一种方法是避免使用expected属性,而使用良好的断言库(或自己创建这样的断言)。

例如,使用AssertJ,您可以这样编写测试:

@Test
public void testPutThrowsIllegalStateException() {
    assertThatIllegalArgumentException().isThrownBy(() -> llmm.put("A", null));
    assertThatIllegalArgumentException().isThrownBy(() -> llmm.put(null, 1));
    assertThatIllegalArgumentException().isThrownBy(() -> llmm.put(null, null));
}