首页 > 解决方案 > 无法解决单元测试中的类型错误

问题描述

我有一个相对简单的单元测试来测试我的 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.

当我将 suppressWarnings 注释移到方法主体之外时,它编译得很好。

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

这没什么大不了的,我只是好奇为什么当我删除变量声明时它不能编译。

谢谢

标签: javajunitcompiler-errors

解决方案


您可以在java 文档中看到该@SurpressWarnings标志仅适用于

  • 类型
  • 场地
  • 方法
  • 范围
  • 构造函数
  • 本地变量

但是如果没有double weightedGrade = ...您将尝试在method-call上使用它,这不是有效的目标。

它适用于双重声明的原因是因为它是一个局部变量。它在方法声明之前起作用,因为它也是一个有效的目标。


推荐阅读