Mockito NullPointerException - не распознающий репозиторий - PullRequest
1 голос
/ 09 ноября 2019

У меня возникают проблемы с выяснением, почему Mockito генерирует исключение NullPointerException, когда я говорю макету вернуть true.

Вот мой тест 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 не подключает макетхранилище с моим хранилищем классов, но я не могу понять, почему. Любая помощь приветствуется. Благодаря.

1 Ответ

2 голосов
/ 09 ноября 2019

Вы не должны создавать 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));
     }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...