Mockito ArgumentCaptor требует заглушки, даже если я использую проверку?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Mockito ArgumentCaptor требует заглушки, даже если я использую проверку?

Сообщение Anonymous »

Я пытаюсь написать модульный тест для следующего метода службы:

Код: Выделить всё

public CommandDTO update(UUID uuid, QuantityRequest request) {
Quantity quantity = quantityRepository.findByUuid(uuid)
.orElseThrow(() -> new EntityNotFoundException(QUANTITY));
Quantity updated = saveQuantity(quantity, request);
return CommandDTO.builder().uuid(updated.getUuid()).build();
}

private Quantity saveQuantity(Quantity quantity, QuantityRequest request) {
//map fields (code omitted for brevity)
return quantityRepository.save(quantity);
}
Я использую ArgumentCaptor, чтобы перехватить параметр количества в частном методе, который вызывает мой метод службы: QuantityRepository.save(quantity).

Код: Выделить всё

@Test
public void test() {
Quantity quantity = new Quantity();

QuantityRequest request = new QuantityRequest();
request.setQuantity(100);

when(quantityRepository.findByUuid(uuid)).thenReturn(Optional.of(quantity));

// It seems to be meaningless this stubbing. because I already stb it in verify method below
when(quantityRepository.save(any())).thenReturn(quantity);

quantityService.update(uuid, request);

verify(quantityRepository).save(quantityCaptor.capture());
Quantity captured = quantityCaptor.getValue();

// assertions...
}

Тест работает, но если я удалю строку if(quantityRepository.save(any())).thenReturn(quantity);, он выдаст «ошибку исключения нулевого указателя» ", потому что в этом случае обновленный параметр в методе обновления имеет значение null. Итак, нужно ли мне использовать упомянутую заглушку в методе When()? Я думаю, мне это не нужно, потому что проверка уже выполняет эту задачу черезverify(quantityRepository).save(quantityCaptor.capture()). Это правда?


Подробнее здесь: https://stackoverflow.com/questions/709 ... use-verify
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»