大佬教程收集整理的这篇文章主要介绍了如何用相同的参数验证相同的模拟方法的调用,该参数会改变模拟中调用之间的状态?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了以下Answer
实现:
public class CapturingAnswer<T, R> implements Answer<T> {
private final Function<InvocationOnmock, R> capturingFunction;
private final List<R> capturedValues = new ArrayList<R>();
public CapturingAnswer(final Function<InvocationOnmock, R> capturingFunction) {
super();
this.capturingFunction = capturingFunction;
}
@OverrIDe
public T answer(final InvocationOnmock invocation) throws Throwable {
capturedValues.add(capturingFunction.apply(invocation));
return null;
}
public List<R> getCapturedValues() {
return CollectionS.UnmodifiableList(capturedValues);
}
}
此答案捕获正在进行的调用的属性。然后capturedValues
可以将其用于简单的断言。该实现使用Java 8
API。如果那不可用,则需要使用能够将转换InvocationOnmock
为捕获值的接口。测试用例中的用法是这样的:
@Test
public voID testSomething() {
CapturingAnswer<VoID,Date> captureDates = new CapturingAnswer<>(this::getEntityDatE)
mockito.doAnswer(captureDates).when(persistencE).save(mockito.any(Entity.class));
service.foo();
Assert.assertNull(captureDates.getCapturedValues().get(0));
}
private Date getEntityDate(InvocationOnmock invocation) {
Entity entity = (Entity)invocation.getArguments()[0];
return entity.getDate();
}
Answer
通过mockitos无法实现由所实现的捕获,ArgumentCaptor
因为这仅在调用被测方法之后使用。
我有以下代码要进行单元测试:
public void foo() {
Entity entity = //...
persistence.save(entity);
entity.setDate(new Date());
persistence.save(entity);
}
我想,以验证上的第一次调用persistence.save
entity.getDate()
返回null
。
因此,我无法使用,mockito.verify(/*...*/)
因为那时该方法foo
已经完成entity.setDate(DatE)
并被调用。
因此,我认为我需要在调用发生时已经对调用进行验证。如何使用mockito做到这一点?
以上是大佬教程为你收集整理的如何用相同的参数验证相同的模拟方法的调用,该参数会改变模拟中调用之间的状态?全部内容,希望文章能够帮你解决如何用相同的参数验证相同的模拟方法的调用,该参数会改变模拟中调用之间的状态?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。