首页 > 解决方案 > 如何在循环中模拟具有迭代的服务方法?

问题描述

我正在尝试对其中包含循环的方法进行单元测试。

基本上,该方法如下所示:

public List<Discount> methodName(Request request){
    for (Discount discountIteration: request.getList()) {
        applyDiscount(service1.getCode(discountIteration));
    }
    ...
}

所以,我不知道如何模拟service1.getCode(discountIteration).

when(...).thenReturn(...);我应该对每个位置做一个request.getList()(这是一个客户对象的列表)。

或者有没有办法动态地做到这一点?

编辑:我试图模拟method循环内部,而不是List

标签: javaunit-testingloopsmockito

解决方案


when(...).thenReturn(...);我应该对每个位置 做一个request.getList()(这是一个客户对象的列表)。

或者有没有办法动态地做到这一点?

我不会做这两个,但我会重构代码以使这个用例的类之间的耦合更小。
由于粒度耦合如此之小,模拟将需要大量样板代码,无法直接阅读,并且测试可维护性会很弱。

您可以通过这种方式更改service1.getCode()方法或添加新方法:

public List<Discount> methodName(Request request){
    List<Code> codes = service1.getCodes(request.getList());
    for (int i = 0; i < discountIteration.size(); i++) {
        Discount discountIteration = request.getList().get(i);
        applyDiscount(codes.get(i));
    }
    ...
}

现在您只需要模拟由getCodes().


推荐阅读