所以我想验证Mockito的方法。
Subject subject = loadSubject();
Teacher teacher = loadTeacher();
Mockito.verify( exam ).createExam( subject , teacher );
但是如果这个条件成立,我想验证这个方法:
subject.name.equals("Math") && subject.complexity == 10
那么如何向Mockito验证添加条件?
答案 0 :(得分:2)
根据Mockito的文件,没有办法指明条件 http://goo.gl/23fYi
从您发布的一小段代码中,我猜您想要进行条件调用,然后Mockito会按照文档中的说明注册所有互动
一旦创建,mock将记住所有交互。然后,您可以有选择地验证您感兴趣的任何互动。
所以
Exam mockedExam = mock(Exam.class);
mockedExam.createExam(subject, teacher);
verify(mockedExam).createExam(subject, teacher);
某处你必须插入条件块,例如
@Test
public void testExamCreation() throws Exception {
if(subject.getName().equalsIgnoreCase("Math") && subject.getComplexity() == 10) {
mockedExam.createExam(subject, teacher);
}
verify(mockedExam).createExam(subject, teacher);
}
我希望它有所帮助。
答案 1 :(得分:0)
这是一个旧帖子,但我发现你可以有条件地验证。我的情况是,我想验证一个方法是否在我的模拟/间谍上被调用,如果另一个方法(实际实现)也被调用。我能够通过使用设置布尔值然后调用真实方法的自定义 doAnswer 来做到这一点。在下面的示例中,验证 doSkip
是否被调用,如果 readName
被调用。
final BsonDocumentReader reader = spy(new BsonDocumentReader(document));
final AtomicBoolean readNameCalled = new AtomicBoolean(false);
doAnswer(invocation -> {
readNameCalled.set(true);
return invocation.callRealMethod();
}).when(reader).readName();
if (readNameCalled.get()) {
verify(reader).skipValue();
}