簡體   English   中英

Mockito NullPointerException - 無法識別存儲庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM