Модульный тест выдает исключение - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь выполнить метод модульного теста, который отвечает за возврат количества жира данного продукта.

public class NutrientsCalculationService {

    ....

    double countFatNumberOfGivenProduct(UserProduct productToCalculate) {
        double fatNumber = retrieveGivenProductFromDB(productToCalculate).getFatNumber(); // All given data in DB are per 100g!!!
        return (fatNumber * productToCalculate.getGram()) / ONE_HUNDRED_GRAMS;
    }


    Product retrieveGivenProductFromDB(UserProduct productToCalculate) {
        if (productToCalculate.getGram() > 0) {
            return productRepository.findByName(productToCalculate.getName())
                    .orElseThrow(() -> new IllegalArgumentException("Product does not exist!"));
        } else {
            throw new IllegalArgumentException("Grams can not be negative");
        }
    }

Я пытался написать для него модульный тест, но он выдает исключение о том, что продукт не существует. Что я должен изменить в этом тесте?

@RunWith(MockitoJUnitRunner.class)
public class NutrientsCalculationServiceTest {

    @Mock
    private ProductRepository productRepository;
    @Mock
    private AccountRepository accountRepository;

    @InjectMocks
    private NutrientsCalculationService nutrientsCalculationService;

    @Test
    public void countFatNumberOfGivenProduct() {
        UserProduct userProduct = createDummyUserProduct();
        Product product = createDummyProduct();
        //when(productRepository.findByName(userProduct.getName())).thenReturn(product);
        //when(nutrientsCalculationService.retrieveGivenProductFromDB(userProduct)).thenReturn(product);
        double expectedFatNumber = nutrientsCalculationService.countFatNumberOfGivenProduct(userProduct);
        double actualFatNumber = product.getFatNumber();

        assertEquals(expectedFatNumber, actualFatNumber,0.0002);
    }

    private UserProduct createDummyUserProduct() {
        return new UserProduct(1, "Schnitzel", 129, 4.2);
    }

    private Product createDummyProduct() {
        return new Product.ProductBuilder()
                .withName("Schnitzel")
                .withCarbohydratesNumber(0)
                .withFatNumber(4.2)
                .withProteinsNumber(22.9)
                .withKcal(129)
                .withType(ProductType.MEAT)
                .build();
    }
}

java.lang.IllegalArgumentException: продукт не существует!

at trainingapp.calculations.NutrientsCalculationService.lambda$retrieveGivenProductFromDB$0(NutrientsCalculationService.java:51)
at java.base/java.util.Optional.orElseThrow(Optional.java:397)
at trainingapp.calculations.NutrientsCalculationService.retrieveGivenProductFromDB(NutrientsCalculationService.java:51)
at trainingapp.calculations.NutrientsCalculationService.countFatNumberOfGivenProduct(NutrientsCalculationService.java:29)
at trainingapp.calculations.NutrientsCalculationServiceTest.countFatNumberOfGivenProduct(NutrientsCalculationServiceTest.java:34)

1 Ответ

2 голосов
/ 24 мая 2019

В вашем примере вы создали Mock из ProductRepository, но на самом деле вы не сказали, что должно произойти, когда вы вызываете методы для ProductRepository.РЕДАКТИРОВАТЬ: Я только что заметил, что эта часть закомментирована, если вы раскомментируйте ее - она ​​должна работать нормально.

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