Mockito如何在有条件的情况下进行验证



所以我想验证Mockito的一个方法。

Subject subject = loadSubject(); 
Teacher teacher = loadTeacher();
Mockito.verify( exam ).createExam( subject , teacher );

但如果这个条件是真的,我想验证这个方法:

subject.name.equals("Math") && subject.complexity == 10

那么,我如何为Mockito验证添加条件呢?

根据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);
}

我希望它能有所帮助。

我遇到了同样的问题:MockitoArgumentCaptor可能就是您想要的,这里有一个很好的例子:https://www.baeldung.com/mockito-argumentcaptor

这是一篇旧文章,但我发现您可以有条件地验证。在我的情况下,我想验证在我的mock/spy上调用了一个方法,前提是也调用了另一个方法(实际实现)。我可以通过使用自定义doAnswer来实现这一点,它设置了一个布尔值,然后调用real方法。在下面的示例中,验证如果调用readName,则doSkip是否被调用。

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();
}

相关内容

  • 没有找到相关文章