我有一个检查空参数的方法,如果有空则抛出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种?
答案 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));
}