java-JUnit测试:强制内部方法调用中的异常

我正在尝试编写一个测试用例,其中涵盖了在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(),并且必须处理异常.

上一篇:java-Mockito使用模拟对象测试DAO


下一篇:java-Mockito Spy调用间谍类的实际方法,而不是返回硬编码的模拟