程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何用相同的参数验证相同的模拟方法的调用,该参数会改变模拟中调用之间的状态?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何用相同的参数验证相同的模拟方法的调用,该参数会改变模拟中调用之间的状态??

开发过程中遇到如何用相同的参数验证相同的模拟方法的调用,该参数会改变模拟中调用之间的状态?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何用相同的参数验证相同的模拟方法的调用,该参数会改变模拟中调用之间的状态?的解决方法建议,希望对你解决如何用相同的参数验证相同的模拟方法的调用,该参数会改变模拟中调用之间的状态?有所启发或帮助;

我创建了以下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,请注明来意。
标签: