在单元测试中模拟/存根 RuntimeException

Lee*_*fin 2 java junit unit-testing mockito

School课堂上,我有一个start()调用另一个函数的函数doTask()

pubic class School {
    public void start() {
       try {
         doTask();
       } catch(RuntimeException e) {
          handleException();
       }
    }
    private void doTask() {
      //Code which might throw RuntimeException
    }
}
Run Code Online (Sandbox Code Playgroud)

我想单元测试start()RuntimeException

@Test
public void testStartWithException() {
  // How can I mock/stub mySchool.start() to throw RuntimeException?
  mySchool.start();
}
Run Code Online (Sandbox Code Playgroud)

我的实现代码抛出 并不容易RuntimeException,如何让测试代码模拟 RuntimeException 并抛出它?

(除了纯 JUnit,我正在考虑使用Mockito,但不确定如何抛出 RuntimeException)

che*_*ohi 6

@Test
public void testStartWithException() {
  // How can I mock/stub mySchool.start() to throw RuntimeException?
  when(mySchool.start()).thenThrow(new RuntimeException("runtime exception"));
}
Run Code Online (Sandbox Code Playgroud)

您可以使用whenwiththenThrow来抛出异常。

  • 我不认为 start() 是应该抛出异常的方法。 (2认同)