thenReturn не возвращает ожидаемые значения

#mockito

#mockito

Вопрос:

 @Component
public class RefValidator implements Component {

    @Autowired
    private Repository repository;


    public void validate(Context context) {
        Txn txn = context.getTxn();
        if (Objects.nonNull(txn) amp;amp; !StringUtils.isEmpty(txn.getReferenceNumber())){            
             if(txn.getId() == 0){
                boolean isRealmIdAndReferenceNumberExists = repository.isRefNumberExistsInSale(txn.getRealmId(), txn.getReferenceNumber());
                if(isRealmIdAndReferenceNumberExists){
                    throw new Exception();
                }
            }

        }
    }
}
  

У меня есть класс, указанный выше, и я хочу протестировать его с помощью mockito. Я делаю @INjectMock для RefValidator и @Mock вкл Repository , но когда я делаю

 Mockito
    .when(repository.isRefNumberExistsInSale(Mockito.anyString(),Mockito.anyString()))
    .thenReturn(true);
  

thenReturn не возвращает true.

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

1. Можете ли вы обновить свой вопрос, включив в него Txn определение? В частности, типы, возвращаемые getRealmId() и txn.getReferenceNumber() .

2. Помимо того, что предлагает @glytching, вы можете выполнить пошаговую отладку внутри метода и проверить, действительно ли вы достигли repository.isRefNumberExistsInSale(txn.getRealmId(), txn.getReferenceNumber()); строки. Может быть, если ответвляется на 2 ifs над ним…

3. Я могу войти в метод и связаться с методом. Txn возвращает строку как для realmIn, так и для ссылочного номера

Ответ №1:

Довольно сложно определить, в чем проблема, потому что вы не предоставили свой тестовый класс. Но похоже, что ваши аннотации не обрабатываются во время выполнения тестового набора.

Попробуйте одно из следующих:

  • Добавьте @RunWith(MockitoJUnitRunner.class) выше свой тестовый класс
  • Добавьте MockitoAnnotations.initMocks(this); внутренний метод установки (который помечается @Before )

Смотрите 2-й раздел этой статьи для получения справки.