我有一个相对简单的单元测试,用于测试Java应用程序中的静态方法。
@Test(expected=MyException.class)
public void testGetWeightedGradeWithWeightSumLessThan100(){
Pair<Integer, Double> gradeOne = Pair.of(10, 80.00);
Pair<Integer, Double> gradeTwo = Pair.of(25, 90);
@SuppressWarnings({"unchecked", "unused"})
double weightedGrade = GradeUtils.getWeightedGrade(gradeOne, gradeTwo);
}
这很好用,我的测试通过了预期的结果。但是,我不需要将getWeightedGrade
的输出分配给变量,因为我希望方法运行时会引发异常。因此,我尝试如下更新单元测试:
@Test(expected=MyException.class)
public void testGetWeightedGradeWithWeightSumLessThan100(){
Pair<Integer, Double> gradeOne = Pair.of(10, 80.00);
Pair<Integer, Double> gradeTwo = Pair.of(25, 90);
@SuppressWarnings({"unchecked", "unused"})
GradeUtils.getWeightedGrade(gradeOne, gradeTwo);
}
这会导致编译器错误:
GradeUtils.getWeightedGrade cannot be resolved to a type.
当我将excludeWarnings注释移到方法主体之外时,它可以正常编译。
@Test(expected=MyException.class)
@SuppressWarnings({"unchecked", "unused"})
public void testGetWeightedGradeWithWeightSumLessThan100(){
Pair<Integer, Double> gradeOne = Pair.of(10, 80.00);
Pair<Integer, Double> gradeTwo = Pair.of(25, 90);
GradeUtils.getWeightedGrade(gradeOne, gradeTwo);
}
这没什么大不了的,我只是很好奇为什么删除变量声明时它不能编译。
谢谢
答案 0 :(得分:0)
您可以在java docs中看到@SurpressWarnings
标志仅适用于
但是没有 double weightedGrade = ...
是您试图在方法调用上使用它的方法,这不是有效的目标。
它对双重声明起作用的原因是因为它是一个局部变量。而且它在方法声明之前起作用,因为它也是有效的目标。