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();