Как смоделировать сервисный метод с итерацией в цикле? - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь выполнить юнит-тест метода, в котором есть цикл.

По сути, метод выглядит следующим образом:

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

Итак, я незнать, как высмеивать service1.getCode(discountIteration).

Должен ли я сделать when(...).thenReturn(...); каждой позиции request.getList() (это список обычного объекта).

Или естьЕсть ли способ сделать это динамически?

Редактировать: я пытаюсь смоделировать method внутри цикла, а не List

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Вы можете использовать any Argument Matcher.

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

Имейте в виду, что valueYouWantToReturn будет одинаковым для каждой записи в списке

0 голосов
/ 12 декабря 2018

Должен ли я делать when(...).thenReturn(...); каждой позиции request.getList() (это список объекта custome).

Или есть ли способ сделать это динамически?

Я бы не стал делать ни один из них, но я бы реорганизовал код, чтобы сделать соединение менее мелкого зерна между классами для этого случая использования.
При таком маленьком соединении зерна, моделирование потребует большого количества кода котельной плиты,быть читабельным, и ремонтопригодность теста будет слабой.

Вы можете изменить метод 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().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...