2014-02-15 3 views
1

Я работаю через ниже урока:JUnit тест неудачу с NPE при тестировании метода валидатор

http://docs.spring.io/docs/Spring-MVC-step-by-step/part4.html

Я пытаюсь проверить метод проверки в поле ниже класса:

public class PriceIncreaseValidator implements Validator { 
    public void validate(Object obj, Errors errors) { 
     PriceIncrease pi = (PriceIncrease) obj; 
     if (pi == null) { 
      errors.rejectValue("percentage", "error.not-specified", null, "Value required."); 
     } 
........ 
} 

Ниже это мой тестовый пример JUnit:

private PriceIncreaseValidator priceIncreaseValidator; 
private PriceIncrease priceIncrease; 
private Errors errors; 

public void testEmptyPriceIncrease() { 

    priceIncreaseValidator.validate(priceIncrease, errors); // This is where I get NPE 

    assertTrue(errors.hasErrors()); 
} 

Так что я получаю NPE при вызове метод проверки в моем тестовом примере JUnit. Тест и класс все компилируются отлично.

Я попытался преобразования priceIncrease в объект согласно ниже, но все-таки не повезло:

Object obj = priceIncrease; 
//validate 
priceIncreaseValidator.validate(obj, errors); 

Любые идеи?

Как вы можете видеть, я пытаюсь проверить, что если не было установлено повышение цены, то при вызове validate возвращается ошибка.

ответ

1

Ни одно из полей PriceIncreaseValidator,PriceIncrease,Errors не создано.

Создайте экземпляр этих полей или откройте их с помощью Spring.

Для создания Используйте Errors объекта:

Errors errors = new BeanPropertyBindingResult(priceIncrease, "priceIncrease");

Полный пример

public void testEmptyPriceIncrease() { 
    PriceIncreaseValidator priceIncreaseValidator = new PriceIncreaseValidator(); 
    PriceIncrease priceIncrease = new PriceIncrease(); 
    Errors errors = new BeanPropertyBindingResult(priceIncrease, "priceIncrease"); 

    priceIncreaseValidator.validate(priceIncrease, errors); // This is where I get NPE 

    assertTrue(errors.hasErrors()); 
} 
+0

Спасибо, я создал экземпляр PriceIncreaseValidator и PriceIncrease. Однако я не могу создать экземпляр ошибок, поскольку это интерфейс. Любые идеи, как решить эту проблему. Благодарю. \t private PriceIncreaseValidator priceIncreaseValidator = new PriceIncreaseValidator(); частное ЦенаСвежут ценуИнвестиция = новая ЦенаИнвестиция(); частные ошибки ошибок; – Sudhir

+0

@ Судир См. Обновление. –

+0

Блестящий, спасибо, отлично работает сейчас. – Sudhir

Смежные вопросы