2

我有一个可怕的习惯,那就是输入下面的内容,直到进入测试阶段才抓住它:

int i = 1;
int j = 2;
i =+ j;  //i equals 2, not 3 as intended; assign only, + is unary and works on the j

当然,正确的版本是

int i = 1;
int j = 2;
i += j;  //i equals 3, as intended with additive & assignment compound operator

我犯了这个错误无数次。有一些代码中存在一个逃脱测试用例的错误,这并不让我感到惊讶。必须有一种方法可以系统地防止这种情况发生。有任何想法吗?

4

5 回答 5

10

定期使用PMD和/或Checkstyle等工具。理想情况下,作为构建过程/持续集成的一部分。

您可能必须为此定义一个自定义规则,因为我不知道这些工具中是否有任何工具默认将此识别为问题。

这不仅会抓住这个问题,还会暗示许多其他潜在的问题。

于 2009-07-01T11:52:50.897 回答
10

根据您使用的 IDE,如果它进行语法高亮显示,我会修改高亮显示,以便它查找模式=+并使其成为一些难看的颜色。

于 2009-07-01T11:53:21.597 回答
1

使用标准文本实用程序,例如

find . -name \*.java -exec grep -H "=+" {} \;
于 2009-07-01T11:53:01.007 回答
0

我认为您必须严格进行单元测试。目前你担心一个特定的问题,但是好的单元测试将捕获大多数问题(忽略线程/加载等)。

您必须分解您的类/方法,以便您可以测试每个功能块并确保完整(或尽可能接近)覆盖。

Clover(商业)或Emma(开源)将为您管理代码覆盖率。

于 2009-07-01T11:52:50.723 回答
0

正如 balpha 评论的那样,找到它的一种简单方法是使用 grep 查找代码中的“=+”。可能从来都不是故意的。

于 2009-07-01T11:54:01.657 回答