java - JUnit 测试 : Forcing exception from internal method call

标签 java unit-testing junit mockito spring-test

我正在尝试编写一个测试用例,其中包含一段在 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

上面的代码片段创建了一个 spyied 对象(将其视为扩展 A 的匿名类),当 m2() 被调用,一个 SomeException 将被抛出。 然后代码继续调用真正的 m1() 方法,该方法本身调用 m2(),并且必须处理异常。

关于java - JUnit 测试 : Forcing exception from internal method call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28306979/

相关文章:

java - 从链表中删除包含特定字符串的元素

java - 如何将命令行参数添加到 Intellij 中的运行配置?

unit-testing - symfony2 使用自定义验证器进行单元测试验证

unit-testing - sqlite:我可以模拟当前时间“now()”进行测试吗?

java - JUnit 产生奇怪的 AssertionFailedError

java - 为什么自定义选项卡的边框没有覆盖 JTabbedPane 中的标准选项卡边框?

java - Eclipse 找不到 Java ME 设备

c# - 类中接口(interface)之外的公共(public)方法

java - Selenium 可以处理自动完成吗?

maven - 是否有一个 Maven 插件列出了多模块项目中的所有 JUnit 测试