Java 如何处理bug“;死存储到局部变量“;在爪哇?

Java 如何处理bug“;死存储到局部变量“;在爪哇?,java,debugging,findbugs,Java,Debugging,Findbugs,我写了一个简单的测试代码。它是一个圆。我想大多数人都可以想象什么是圆形类,所以我不会粘贴它 在测试代码中,我尝试使用无效点测试circle构造函数,并假设抛出异常。但是一个错误发生了。我在网上查了一下,但还是不知道怎么解决这个问题。有人能帮我吗?谢谢 代码信息,bug在下面代码的最后一句中 /** * Tests that the Circle constructor throws an exception for center Point. */ @Test (expected = Il

我写了一个简单的测试代码。它是一个圆。我想大多数人都可以想象什么是圆形类,所以我不会粘贴它

在测试代码中,我尝试使用无效点测试circle构造函数,并假设抛出异常。但是一个错误发生了。我在网上查了一下,但还是不知道怎么解决这个问题。有人能帮我吗?谢谢

代码信息,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);
}
错误报告

错误:在CircleTest.testilegalcenter()中死存储到testCircle

此指令为局部变量赋值,但该值不会在任何后续指令中读取或使用。通常,这表示错误,因为从未使用计算的值


请注意,Sun的javac编译器经常为最终的局部变量生成死存储。因为FindBugs是一个基于字节码的工具,所以没有简单的方法来消除这些误报

只需删除变量并按如下方式调用构造函数:

@Test (expected = IllegalArgumentException.class)
public void testIllegalCenter() {
    new Circle(VALID_RADIUS, INVALID_POINT, VALID_COLOR);
}

我的猜测是,由于从未使用过test Circle,编译器甚至不会编译语句,也不会调用构造函数。我会针对null(offtopic)断言它。针对testcode运行findbug真的有用吗?为什么要麻烦将
Circle
分配给变量?因为您只是在测试构造函数,所以只需编写
新的圆(有效的\u半径、无效的\u点、有效的\u颜色)没有分配。如果您正在测试这个类,那么在不打印它的情况下,您如何知道输出是正确的呢?Findbug指出了这一点,从而完美地完成了它的工作。请在该行后添加一条语句,检查是否至少有一个字段填充了您期望的内容,如@Karthik Kalyanasundaram assert(testCircle.radius)所述