[英]Mockito NullPointerException - Not recognizing repository
當我告訴模擬返回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 class 實現如下:
@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 似乎沒有將模擬存儲庫與我的 class 存儲庫連接起來,但我不知道為什么。 任何幫助表示贊賞。 謝謝。
您不應該使用new
關鍵字創建PizzaValidator
,您應該在測試中使用@Autowire
它
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class PizzaValidatorTest {
private Pizza meatPizza;
@Autowire
private PizzaValidator validator;
@MockBean
private IngredientRepository ingredientRepository;
@MockBean
private PizzaSizeRepository pizzaSizeRepository;
@Before
public void setUp() throws Exception {
meatPizza = new Pizza();
}
@Test
public void validateValid() {
when(ingredientRepository.existsById(any())).thenReturn(true);
when(pizzaSizeRepository.existsById(any())).thenReturn(true);
assertTrue(validator.validate(meatPizza));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.