java - 无法解决单元测试中的类型错误
问题描述
我有一个相对简单的单元测试来测试我的 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);
}
这没什么大不了的,我只是好奇为什么当我删除变量声明时它不能编译。
谢谢
解决方案
您可以在java 文档中看到该@SurpressWarnings
标志仅适用于
- 类型
- 场地
- 方法
- 范围
- 构造函数
- 本地变量
但是如果没有,double weightedGrade = ...
您将尝试在method-call上使用它,这不是有效的目标。
它适用于双重声明的原因是因为它是一个局部变量。它在方法声明之前起作用,因为它也是一个有效的目标。
推荐阅读
- matlab - 叶表水分的相变/相移
- discord.js - 如何为 discord.js 创建报价命令
- python - 根据长度刮掉链接
- python - “找不到存储过程
” 使用 Python 和 pyodbc 时出错 - java - 映射到相同值的两个键。爪哇
- python-3.x - 在字符串中第二次出现特定字符后删除文本 - 有更好的方法吗?
- javascript - React - TypeError:无法读取未定义的属性“图像”
- big-o - BST的最坏情况时间复杂度
- apache-spark - HDInsight 上的 PySpark Kafka 流式传输 - TypeError:“JavaPackage”对象不可调用
- c# - Asp.net,广播简单消息