首页 文章

如何在循环中使用迭代模拟服务方法?

提问于
浏览
0

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

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

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

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

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

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

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

2 回答

  • 2

    您可以使用any参数匹配器。

    when(service1.getCode(any(DiscountIteration.class)).thenReturn(valueYouWantToReturn);
    

    请记住,valueYouWantToReturn对于列表中的每个条目都是相同

  • 2

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

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

    我不会这样做,但我会重构代码,使这个用例的类之间的耦合更小。
    如此小的颗粒耦合,模拟将需要大量的锅炉板代码,不是直接可读的并且测试可维护性将是弱的。

    您可以更改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()返回的 List。

相关问题