mockito,如何覆盖测试catch块



Android应用程序,如果一个函数调用另一个函数,该函数可能会抛出

static string SOME_DEFINE_1 = "some_define_1";
......
void myFunc() {
try {
HashMap<String, String> data = new HashMap<>();
data.put("key_1", SOME_DEFINE_1);
otherObject.func(data);
} catch (Throwable ex){
Log.e(TAG, "+++ exception from otherObject.func(), "+ ex.toString());
// do something
anotherFunc();
}
}

在单元测试myFunc时,如何测试catch块?

在您的示例中,otherObject来自哪里还不清楚,但一般来说,要测试异常处理块,您需要抛出异常的代码。在本例中,一种方法可能是模拟otherObject,然后使用thenThrow使其在调用func(data)方法时引发异常。您可以使用正在测试的类的spy并存根另一个Func方法,这样您就可以用其他方法替换它,然后验证它是否被调用以满足您期望引发异常的条件。

这些文章展示了一般方法:

  • https://www.baeldung.com/mockito-spy-(编号4(
  • https://www.baeldung.com/mockito-exceptions

因此,在伪代码示例中:

// arrange
myClassUnderTest = spy(TheClassUnderTest);
otherObject = mock(OtherObject);
doNothing().when(myClassUnderTest).anotherFunc();
doThrow(new RuntimeException("simulated exception")).when(otherObject).func(any());
// act
myClassUnderTest.myFunc();
// assert
verify(myClassUnderTest , times(1)).anotherFunc();

相关内容

  • 没有找到相关文章

最新更新