测试验证方法时,JUnit测试失败,NPE失败

时间:2014-02-15 22:59:23

标签: java spring spring-mvc junit

我正在完成以下教程:

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

我正在尝试在下面的类中测试validate方法:

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());
}

因此,在我的JUnit测试用例中调用validate方法时,我得到了NPE。 测试和课程都编译得很好。

我已尝试将priceIncrease转换为如下所示的对象,但仍然没有运气:

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

有什么想法吗?

如你所见,我试图测试一下,如果没有设定价格上涨,那就是 调用validate时会返回错误。

1 个答案:

答案 0 :(得分: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());
}