es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Prueba Unitaria: No se puede obtener el valor del Servicio en Java.

Estoy tratando de probar el siguiente método que obtiene datos del servicio Price.

CountryServiceImpl:

public PriceDTO findBCountryUuid(UUID countryUuid) {
    // código omitido

    // !!! el valor de currency es nulo
    Currency currency = currencyService.getCurrencyByCountry(countryUuid);

    return new PriceDTO(currency);
}

Aquí está el servicio PriceService.

PriceServiceImpl:


@Override
public Currency getCurrencyByCountry(UUID countryUuid) {
return countryRepository.findByUuid(countryUuid)
.orElseThrow(() -> new EntityNotFoundException("Country"))
.getCurrency();
}

Utilizo el siguiente enfoque para probar:

@Mock
private CountryRepository countryRepository;

@Mock
private CurrencyServiceImpl currencyService;

@InjectMocks
private CountryServiceImpl priceService;

@Test
public void test_findBCountryUuid() {
    // código omitido

    final Country country = new Country();
    country.setName("Country");
    country.setCurrency(currency);

    when(countryRepository.findByUuid(countryUuid))
        .thenReturn(Optional.of(country));

    PriceDTO result = priceService.findBCountryUuid(countryUuid);

    //... aserciones
}

El problema es que en el método findBCountryUuid, el valor de currency es nulo, y por esta razón obtengo un valor de precio nulo en el parámetro result de mi método de prueba. El problema está completamente relacionado con el uso incorrecto de burlar o annotar el PriceService. Creo que debería burlar el repositorio que utiliza el PriceService en lugar de burlar el PriceService. ¿Qué hay de malo en esta implementación?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema con esta implementación es que estás simulando CurrencyServiceImpl en lugar de PriceServiceImpl. El método findBCountryUuid utiliza currencyService.getCurrencyByCountry, que es un método de PriceServiceImpl. Por lo tanto, en tu prueba debes simular PriceServiceImpl en lugar de CurrencyServiceImpl y asegurarte de que el método getCurrencyByCountry devuelva un objeto Currency con un valor no nulo.

Comments are closed.