Java 单元测试引发异常
我正在尝试单元测试方法,该方法负责返回给定产品的fat数量Java 单元测试引发异常,java,junit,mockito,Java,Junit,Mockito,我正在尝试单元测试方法,该方法负责返回给定产品的fat数量 public class NutrientsCalculationService { .... double countFatNumberOfGivenProduct(UserProduct productToCalculate) { double fatNumber = retrieveGivenProductFromDB(productToCalculate).getFatNumber(); //
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)
在您的示例中,您创建了
ProductRepository
的Mock,但是您没有真正说明在ProductRepository
上调用方法时应该发生什么。
编辑:
我刚刚注意到,如果您取消注释该部分,它会被注释-它应该可以正常工作。在您的示例中,您已经创建了
产品存储库的模拟,但是您没有真正说明在产品存储库上调用方法时应该发生什么。
编辑:
我刚刚注意到这部分已经被注释了,如果您取消注释,它应该可以正常工作