【发布时间】:2014-05-25 02:53:04
【问题描述】:
我写了一个简单的测试代码。这是一个圆圈。我想大多数人都能想象出什么是圆形类,所以我就不贴了。
在测试代码中,我尝试用无效点测试圆形构造函数,并假设抛出异常。但是出现了一个错误。我上网查了一下,还是不知道怎么解决。有没有人可以帮助我?谢谢
代码信息,bug在后面代码的最后一句
/**
* Tests that the Circle constructor throws an exception for center Point.
*/
@Test (expected = IllegalArgumentException.class)
public void testIllegalCenter() {
//Instantiates a circle with an incorrect center point.
@SuppressWarnings("unused")
final Circle testCircle = new Circle(VALID_RADIUS, INVALID_POINT, VALID_COLOR);
}
错误报告
Bug:CircleTest.testIllegalCenter() 中 testCircle 的死存储
该指令为局部变量赋值,但在任何后续指令中都不会读取或使用该值。通常,这表示错误,因为从未使用过计算的值。
请注意,Sun 的 javac 编译器通常会为最终局部变量生成死存储。因为 FindBugs 是一个基于字节码的工具,所以没有简单的方法可以消除这些误报。
【问题讨论】:
-
我的猜测是,由于从未使用过测试 Circle,因此编译器甚至不会编译该语句,并且永远不会调用构造函数
-
我会针对 null 断言它
-
(offtopic)对测试代码运行 findbug 真的有用吗?
-
你为什么要把
Circle分配给一个变量呢?由于您只是在测试构造函数,因此您可以编写new Circle(VALID_RADIUS, INVALID_POINT, VALID_COLOR);而不进行赋值。那么你就不会收到这个错误了。 -
如果你在测试这个类,不打印出来怎么知道输出是正确的?通过指出这一点,Findbug 正在完美地完成它的工作。请在该行之后添加一条语句,以检查是否至少有一个字段填充了您期望的内容,即。正如@Karthik Kalyanasundaram 所说的断言(testCircle.radius)