mockito, когда().thenReturn() возвращает неправильное значение

#java #unit-testing #mocking #mockito

Вопрос:

Mockito используется для повторения одного и того же метода дважды, и он должен возвращать разные значения для каждого макета. Но когда я тестирую, он всегда будет учитывать последнее возвращаемое значение, над которым издеваются.

Строка when(ServiceB.GetById(1)).thenReturn(первое значение); возвращает последнее значение вместо первого значения

В настоящее время это выглядит так:

 when(serviceA.findById(any(String.class))).thenReturn(Object1);
when(serviceB.getById(Object1)).thenReturn(FirstValue);
when(serviceC.convert(any(Integer.class), any(Integer.class))).thenReturn(Object2);
when(serviceB.getById(Object2)).thenReturn(LatestValue);
when(serviceA.save(Object2)).then(returnsFirstArg());
 

Как исправить это таким образом, чтобы при(ServiceB.GetById(2)).thenReturn(последнее значение); возвращалось последнее значение вместо первого значения?

Комментарии:

1. Вы пробовали использовать reset(serviceB) ?

2. Кроме того, вы можете обновить фрагмент кода, чтобы показать, в какой строке вы пытаетесь получить значение. Поскольку параметр для getById() отличается, он никогда не должен возвращать одно и то же значение, настроенное для разных значений параметров

3. Я только что починил. Пожалуйста, проверьте ответ, который я опубликую в ближайшие минуты.

4. Это из-за того, что метод equals возвращает значение true для вашего объекта?

Ответ №1:

Несмотря на то, что это разные объекты Object1 и Object2 имеют одинаковые значения.

Учитывая фрагмент кода, который я опубликовал в вопросе, Mockito всегда возвращался latestValue для обеих строк:

 when(serviceB.getById(Object1)).thenReturn(FirstValue);
when(serviceB.getById(Object2)).thenReturn(LatestValue);
 

Но если я изменю Object1 значение перед передачей в макет, то оно будет работать правильно. Что-то вроде приведенного ниже решило проблему:

 Object1.setPropertyValue(anyValueDifferentFromObject2)
 

Комментарии:

1. Я не понимаю, какое значение имеет этот вопрос, но рад, что вы его исправили

2. Это будет полезно для тех, кто является новичком с Mockito и может столкнуться с той же проблемой.