当前位置: 首页 > 面试题库 >

使用Mockito,如何验证某个方法被调用并带有特定参数?

华萧迟
2023-03-14
问题内容

我正在使用Mockito 1.9.0。我将如何验证某个方法仅被调用一次,并且传递给它的字段之一包含某个值?在我的JUnit测试中,

@Before
public void setupMainProg() { 
    // Initialize m_orderSvc, m_opportunitySvc, m_myprojectOrgSvc
    ...
    m_prog = new ProcessOrdersWorker(m_orderSvc, m_opportunitySvc, m_myprojectOrgSvc);
}   // setupMainProg

@Test
public void testItAll() throws GeneralSecurityException, IOException { 
    m_prog.work();  
}

方法“工作”调用方法“ m_orderSvc”(传递给对象的参数之一)。“ m_orderSvc”又包含一个成员字段“
m_contractsDao”。我想验证“ m_contractsDao.save”是否被调用一次,并且传递给它的参数包含某个值。

这可能有点令人困惑。让我知道如何澄清我的问题,我很高兴这样做。


问题答案:

首先,您需要创建一个模拟m_contractsDao并进行设置。假设该类是ContractsDao:

ContractsDao mock_contractsDao = mock(ContractsDao.class);
when(mock_contractsDao.save(any(String.class))).thenReturn("Some result");

然后将模拟注入m_orderSvc并调用您的方法。

m_orderSvc.m_contractsDao = mock_contractsDao;
m_prog = new ProcessOrdersWorker(m_orderSvc, m_opportunitySvc, m_myprojectOrgSvc);
m_prog.work();

最后,验证是否正确调用了模拟:

verify(mock_contractsDao, times(1)).save("Parameter I'm expecting");


 类似资料:
  • 问题内容: 在Java中使用Mockito如何验证某个方法仅被调用一次且其确切参数忽略对其他方法的调用? 样例代码: 在本节中应该做什么? 已经尝试失败: 不。它不允许调用其他方法,例如。 不。没有考虑到我们允许一个呼叫。 问题答案: 第一个检查预期的参数化呼叫,第二个检查根本没有一个呼叫。

  • 我在类中有一个签名为的方法。 我有一个调用方法的代码块: 如果我想测试databaseService.save(user)没有被调用,那么我如何用Mockito(3.3.3版)来做呢?

  • 但这将返回以下错误: org.mockito.exceptions.misusing.NotaMockException: 传递给verify()的参数类型为$proxy4,不是mock!

  • 问题内容: 我正在使用以下内容。 这是我的utils课 这是被测课程的要点: 这是测试: 以上测试失败。给出的验证模式为空,但根据代码,如果订购成功,则必须发送电子邮件。 问题答案: 如果您要嘲笑行为(类似),则实际上无需调用。也就是说,这是我重写测试方法的动力: 我分为四个部分,以更好地突出显示正在发生的事情: 1.变量 我选择在此处声明任何实例变量/方法参数/模拟协作者。如果它在多个测试中使用

  • 我正在寻找一种方法来验证Mockito,在测试期间没有与给定的模拟进行任何交互。对于具有验证模式的给定方法,很容易实现这一点,但是我还没有找到完整模拟的解决方案。 我真正想要实现的是:在测试中验证,控制台上没有打印任何get。jUnit的总体思路如下: 一个有很多方法,我真的不想用单独的verify来验证每一个方法,对于。。。 所以我希望,如果有一个简单的解决方案,鉴于我有一个良好的测试覆盖率,我

  • 我想模拟特定参数的方法调用并为其他参数调用真正的方法。我有: 这样,我就得到了folderDAO的模拟结果。getFoldersHierarchy(EHierarchyType.CLIENT\u DOC)但是当我尝试用任何其他参数调用它时,我得到了NullPointerException 那么,我做错了什么,或者应该如何只针对特定参数存根方法调用呢? junit-jupiter api: 5.4.