使用JUnit的assertNull因NullPointerException而失败

时间:2016-01-19 22:03:07

标签: java junit null

对于我的项目,其中一个返回必须为null。使用<%= form_for(@task) do |f| %> <%= f.check_box :important, {}, disabled="disabled" %> <% end %> 进行测试时,其失败并显示assertNull(Null Object here)

有人可以告诉我为什么吗?我认为assertNull应该测试为null。

这是我的代码的一部分。

NullPointerException

我的测试用例是:

public static UVI calculateUVI(double[] radiation) {
    double calculation = 0.0;
    double[] copyRad = new double[radiation.length];
    for (int i = 0; i < radiation.length; i++)
    {
        copyRad[i] = radiation[i];
        if (radiation[i] > RADIATION_MAXIMUM)
            copyRad[i] = RADIATION_MAXIMUM;

        if (radiation[i] < RADIATION_MINIMUM)
            copyRad[i] = 0.0;

        calculation += (copyRad[i] * MD_WEIGHTS[i]);
    }

    if (radiation.length != MD_WEIGHTS.length || radiation == null) {
      UVI nulled = null;
      return nulled;
    }

    calculation /= B;
    UVI result = new UVI(calculation, true);
    return result;
}

1 个答案:

答案 0 :(得分:3)

问题不在于断言声明。

传入数组calculateUVI(...)时,您正在使用空数组调用test9

由于数组为null radiation.length将在方法中抛出NullPointerException

由于该方法无法使用null数组运行,因此您可以添加&#34; Guard Clause&#34;并且只需从方法中立即返回null,这样您的测试就会成功。

public static UVI calculateUVI(double[] radiation) {
    if(radiation == null) {
        return null;
    }
    ...
}