我正在尝试编写一个测试用例,其中涵盖了在catch块内编写的一段代码.它是这样的:
我在A类中有两种方法.
class A{
public SomeReturnType m1()
{
try{
m2();
}catch(SomeException ex)
{
//handler code for SomeException (This is what I want to test).
}
}
public SomeReturnType m2() throws SomeException
{
//Some logic
}
}
我想知道如何从方法m1()的单元测试用例中调用m2()时强制产生此异常?使用Mockito或任何其他测试库的任何解决方案?
解决方法:
如您所建议,Mockito将是用于这种用例的经典工具:
// Initialization - should probably be in the @Before method:
A a = Mockito.spy(new A());
Mockito.doThrow(new SomeException("yay!")).when(a).m2();
// Actual test:
SomeResult actualResult = a.m1();
assertEquals(someExpectedResult, actualResult); // or some other assertion
上面的代码片段创建了一个间谍对象(将其视为扩展A的匿名类),该对象具有已定义的行为,即在调用m2()时将引发SomeException.
然后,代码继续调用真正的m1()方法,该方法本身调用m2(),并且必须处理异常.