当我告诉模拟返回true
时,我很难弄清为什么Mockito会抛出NullPointerException。
这是我的JUnit测试:
public class PizzaValidatorTest {
private Pizza meatPizza;
private PizzaValidator validator = new PizzaValidator();
@MockBean
private IngredientRepository ingredientRepository;
@MockBean
private PizzaSizeRepository pizzaSizeRepository;
@Before
public void setUp() throws Exception {
meatPizza = new Pizza();
validator = new PizzaValidator();
}
@Test
public void validateValid() {
when(ingredientRepository.existsById(any())).thenReturn(true);
when(pizzaSizeRepository.existsById(any())).thenReturn(true);
assertTrue(validator.validate(meatPizza));
}
}
PizzaValidator类在以下实现:
@Controller
public class PizzaValidator implements Validator<Pizza> {
@Autowired
IngredientRepository ingredientRepository;
@Autowired
PizzaSizeRepository pizzaSizeRepository;
@Override
public boolean validate(Pizza entity) {
return validatePizza(entity);
}
private boolean validatePizza(Pizza pizza) {
return validPizzaSize(pizza) && validIngredients(pizza);
}
private boolean validPizzaSize(Pizza pizza) {
return pizzaSizeRepository.existsById(pizza.getSizeDesc().getId());
}
private boolean validIngredients(Pizza pizza) {
for (Ingredient ingredient : pizza.getIngredients()) {
if (!ingredientRepository.existsById(ingredient.getId())) {
return false;
}
}
return true;
}
}
由于某种原因,Mockito似乎没有将模拟存储库与我的类存储库连接,但我不知道为什么。任何帮助表示赞赏。谢谢。