JUnit在预期的异常后继续断言

Jie*_*eng 8 java junit exception

我有类似的东西

@Test(expected = IllegalArgumentException.class)
public void cdIntoNonExistantFolder() {
    cdTool.changeDirectory("nonexistant");
    assertThat(cdTool.getStatusCode(), not(equalTo(0)));
}
Run Code Online (Sandbox Code Playgroud)

我相信assertThat不会运行changeDirectory会抛出异常.是否有可能使它仍然运行?

Mat*_*ttR 13

你可以使用finally:

@Test(expected = IllegalArgumentException.class)
public void cdIntoNonExistantFolder() {
    try {
        cdTool.changeDirectory("nonexistant");
    }
    finally {
        assertThat(cdTool.getStatusCode(), not(equalTo(0)));
    }
}
Run Code Online (Sandbox Code Playgroud)


fgb*_*fgb 6

我宁愿避免在单元测试中使用任何try/catch结构.这是Catch-Exception的一种可能性:

@Test
public void cdIntoNonExistantFolder() {
    catchException(cdTool).changeDirectory("nonexistant");

    assertThat(caughtException(), instanceOf(IllegalArgumentException.class));
    assertThat(cdTool.getStatusCode(), not(equalTo(0)));
}
Run Code Online (Sandbox Code Playgroud)

或者使用JUnit 5:

@Test
public void cdIntoNonExistantFolder() {
    expectThrows(IllegalArgumentException.class, () -> {
        cdTool.changeDirectory("nonexistant");
    });

    assertThat(cdTool.getStatusCode(), not(equalTo(0)));
}
Run Code Online (Sandbox Code Playgroud)