我使用Sonarqube 5.1并尝试使用"Sonar way"Java质量配置文件.工作很简单:我想为缺少的媒体类型定义一个全局 String常量:
public interface Utf8MediaType {
String APPLICATION_JSON = "application/json;charset=UTF-8";
}
Run Code Online (Sandbox Code Playgroud)
然而,Sonarqube告诉我这在规则squid中是不好的做法:S1214 - 不应在接口中定义常量.长篇文章讨论了实现这个接口,我并不打算这样做,但我放弃并创建了一个类:
public class Utf8MediaType {
public static final String APPLICATION_JSON = "application/json;charset=UTF-8";
}
Run Code Online (Sandbox Code Playgroud)
但是,这被认为是规则squid中的一个主要设计问题:S1118 - 实用程序类不应该有公共构造函数.所以它敦促我添加一个私有构造函数.当然,这个构造函数首先不要违反规则squid中的约定:S1213 - 接口声明或类的成员应该以预定义的顺序出现.我想在那之后我甚至可能会得到common-java:InsufficientBranchCoverage,因为私有构造函数不在测试中.
这些是默认规则,我觉得它们组合起来有点傻.我有更多的例子,其中默认值对我们不起作用(缺少TestNG支持).我能做些什么呢?您有什么推荐的吗?
让步。让它成为一个类,添加一个私有构造函数,在单元测试中使用内省。使代码变大十倍。对于字符串常量。
一般来说,这是正确的做法。您确实不想创建“常量”界面。需要私有构造函数来确保用户不会无意中扩展或实例化不应实例化的对象。
创建例外列表。但对每个项目执行此操作可能会导致列表很长,并会导致人们甚至为重要的内容添加例外情况。
太多工作。
停用规则。现在我不想篡改默认配置文件,因为这可能意味着 Sonarqube 升级需要大量工作。
正如你所说...坏主意。
创建一个继承默认值并覆盖内容的配置文件。事实证明,当您从配置文件继承时,您无法停用规则。您只能添加其他规则并更改规则的配置(以降低其严重性)。
如果您将严重性设置为“信息”,则会将其从技术债务计算中删除。squid:S1213当我使用 Eclipse 指定的默认顺序进行排序时,我必须这样做。
| 归档时间: |
|
| 查看次数: |
5617 次 |
| 最近记录: |