java - 使用 Mockito,我如何验证一个方法是用某个参数调用的?

标签 java mocking mockito

我正在使用 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();  
}

方法“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");

然后将 mock 注入(inject) m_orderSvc 并调用您的方法。

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

最后,验证 mock 是否被正确调用:

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

关于java - 使用 Mockito,我如何验证一个方法是用某个参数调用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11802801/

相关文章:

unit-testing - 单元测试自定义 Doctrine 存储库

android - "Mockito 0 matchers expected, 3 recorded"- 为什么需要 0 个匹配器?

java - 使用 Mockito 对 Runnable 进行单元测试

java - 莫基托 : Basic Code doubts

java - WebDriver 无法从 JQuery 下拉列表中选择

java - 通过 jndi 列出 JMSBroker 的所有队列名称

java - 转换错误

java - 使用 AXIS2 创建的 ADB stub 在客户端获取原始 XML SOAP 响应

java - 如何模拟 DefaultMessageListenerContainer

javascript - 为什么 jest 不 mock 这个模块?