我正在使用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"只被调用了一次,并且传递给它的参数包含特定值。
这可能有点令人困惑。请让我知道如何澄清我的问题,我很乐意这样做。
, times(1)
,因为它始终隐含着一次。而且,any(String.class)
可以替换为稍微更方便的anyString()
。 - Kevin Welkerverify
方法之后传递给方法的参数使用equals
方法与实际测试期间传递的参数进行比较。因此,无论该方法是什么(例如mamboking示例中的save
方法),都要考虑每个参数的类型以及是否真正需要使用equals
进行比较。如果您希望使用除equals
以外的内容对参数进行测试,则需要某种类型的ArgumentMatcher
(可能是Kevin Welker回答中的ArgumentCaptor
)。 - Dawood ibn Kareemverify(mock_contractsDao, times(1)).save((String s) -> s.length() == 23);
。 - jameshfisherverify(mock_contractsDao).save(argThat(s->s.length==23));
- Kevin Welker