我正在尝试编写一个测试用例,其中包含一段在 catch
block 中编写的代码。事情是这样的:
我在 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
上面的代码片段创建了一个 spy
ied 对象(将其视为扩展 A
的匿名类),当 m2()
被调用,一个 SomeException
将被抛出。
然后代码继续调用真正的 m1()
方法,该方法本身调用 m2()
,并且必须处理异常。
关于java - JUnit 测试 : Forcing exception from internal method call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28306979/