代码之家  ›  专栏  ›  技术社区  ›  Stu Thompson Helter Scelter

在Java中自动捕获= +而不是+=的使用

  •  2
  • Stu Thompson Helter Scelter  · 技术社区  · 16 年前

    我有这样一个可怕的习惯:输入下面的内容,直到进入测试阶段后才发现:

    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
    

    我犯了无数次这个错误。如果有一些代码中有一个bug从测试用例中逸出,我不会感到惊讶。必须有一种方法来系统地防止这种情况的发生。有什么想法吗?

    5 回复  |  直到 16 年前
        1
  •  10
  •   Joachim Sauer    16 年前

    经常使用诸如 PMD 和/或 Checkstyle . 理想情况下,作为构建过程/持续集成的一部分。

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

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

        2
  •  10
  •   Matt Bridges    16 年前

    根据您使用的IDE,如果它执行语法突出显示,我将修改突出显示,以便它查找模式 =+ 而且看颜色也很糟糕。

        3
  •  1
  •   Christoffer    16 年前

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

    find . -name \*.java -exec grep -H "=+" {} \;
    
        4
  •  0
  •   Avi    16 年前

    正如Balpha所评论的,找到这一点的一个简单方法是对代码中“=+”进行grep。这可能不是有意的。

        5
  •  0
  •   Brian Agnew    16 年前

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

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

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