当前位置: 首页 > 知识库问答 >
问题:

JUnit测试:从内部方法调用强制异常

李烨
2023-03-14

我正在尝试编写一个测试用例,它涵盖了在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或其他测试库的解决方案?

共有1个答案

史朗
2023-03-14

正如您所建议的,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(),并且必须处理异常

 类似资料:
  • 问题内容: 是否可以 在调试时 强制抛出异常。 让我举一个例子:我正在调试一些代码,这些代码是我从互联网上下载页面的地方。当Internet连接断开或网卡断开时,应抛出IOException,但执行会被阻止(在第二行) 我需要一种在代码阻塞时 在调试 时强制引发异常的方法,以便可以跳转到catch块。 我正在使用netbeans BTW。 While Debugging =执行线程暂停时手动添加。

  • 我正试图为一个方法编写一个测试用例,该方法基于特定的逻辑抛出异常。然而,测试用例失败了,因为预期的异常和获得的异常是不同的。 我如何解决这个问题?

  • 如何使用JUnit测试在我现有的项目中运行JMH基准测试?官方留档建议制作一个单独的项目,使用Maven阴影插件,并在方法中启动JMH。这是必要的吗?为什么推荐它?

  • 我有一个Spring应用程序 我插入的新代码-maven测试失败-但仅当我从intelliJ运行测试时才从maven测试成功。来自maven/jenkins失败 org . spring framework . beans . factory . beancreationexception:创建名为“predefinedModelHandlerService”的bean时出错:调用init方法失败

  • 问题内容: 我真的是java的新手。 我正在构造函数上运行一些JUnit测试。构造函数是这样的:如果为其参数之一赋予null或空字符串,则应该抛出异常。 当我在JUnit中使用null或空字符串参数测试此构造函数时,即使我几乎100%确信将此类参数传递给它时,构造函数方法确实会引发异常,我也会看到一条红色的条。 如果该方法以预期的方式引发异常,则JUnit中是否应该没有绿色的条形?还是当异常抛出按

  • 问题内容: 编辑:目前没有JUnit 4。 嗨,您好, 我对使用JUnit进行“智能”异常测试有疑问。目前,我这样做是这样的: 如您所见,对于每个应该引发异常的函数,我都需要一个try / catch块。似乎不是执行此操作的好方法-还是没有可能减少try / catch的使用? 问题答案: 我建议您需要分解为多个单独的测试。各个try / catch块似乎彼此非常独立。您可能还希望将通用初始化逻辑