如何进行单元测试以覆盖异常分支

时间:2013-07-19 16:32:06

标签: unit-testing exception-handling junit4 mockito robolectric

我使用JUnit4和Mockito为我的应用程序编写单元测试,我希望全面覆盖。但我不完全了解如何覆盖异常分支。 例如:

try {
    Thread.sleep(100);
} catch (InterruptedException e) {
    e.printStackTrace();
}

我如何从测试异常中调用?

1 个答案:

答案 0 :(得分:2)

虽然您可能无法轻易地将异常插入到Thread.sleep中,因为它是静态调用而不是针对注入的实例,因此您可以轻松地存入注入的依赖项以在调用时抛出异常:

@Test
public void shouldHandleException() throws Exception {
  // Use "thenThrow" for the standard "when" syntax.
  when(dependency.someMethod()).thenThrow(new IllegalArgumentException());

  // Void methods can't use "when" and need the Yoda syntax instead.
  doThrow(new IllegalArgumentException()).when(dependency).someVoidMethod();

  SystemUnderTest system = new SystemUnderTest(dependency);
  // ...
}