Mockito NullPointerException-无法识别存储库

当我告诉模拟返回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似乎没有将模拟存储库与我的类存储库连接,但我不知道为什么。任何帮助表示赞赏。谢谢。

zjqgd 回答:Mockito NullPointerException-无法识别存储库

您不应使用PizzaValidator关键字创建new,而应在测试中@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));
     }
 }
本文链接:https://www.f2er.com/3134415.html

大家都在问