有没有办法将代码排除在Cobertura覆盖率报告之外?我们有一些方法不应包含在覆盖率报告中,因此不会降低覆盖率数字.
我知道Clover有这样的功能,但我没有找到类似的Cobertura.
如果一个类包含一堆静态方法,为了确保没有人错误地初始化这个类的实例,我创建了一个私有构造函数:
private Utils() {
}
Run Code Online (Sandbox Code Playgroud)
现在..如果不能看到构造函数,怎么能测试呢?这可以覆盖测试吗?
我有一个非常简单的问题:
我想要一个Java类,它提供了一个公共静态方法,它可以做一些事情.这仅用于封装目的(在一个单独的类中包含所有内容)...
这个类既不应该被实例化,也不应该被扩展.这让我写道:
final abstract class MyClass {
static void myMethod() {
...
}
... // More private methods and fields...
}
Run Code Online (Sandbox Code Playgroud)
(虽然我知道,这是禁止的).
我也知道,我可以使这个类完全是final,并覆盖标准构造函数,同时将其设为私有.
但在我看来,这更像是一种"解决方法",并且应该更有可能通过最终的抽象类来完成......
而且我讨厌变通方法.所以只是为了我自己的兴趣:还有另一种更好的方法吗?
我使用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支持).我能做些什么呢?您有什么推荐的吗?
我正在阅读并通过枚举实现场景.我想我们可以创建一个没有任何实例的枚举.这样的实际用途是Enum
什么?其次Enum
也可以实现一个接口,但显然不能扩展一个类,因为它已经扩展了类Enum
.创建Enum
没有实例的实际优势是什么?本
我想看一个例子来阻止JaCoCo将私有空构造函数报告为Java类中的非覆盖代码.
在我的maven插件配置中
<rule>
<element>CLASS</element>
<excludes>
<exclude>JAVAC.SYNTHCLASS</exclude>
<exclude>JAVAC.SYNTHMETH</exclude>
</excludes>
</element>
</rule>
Run Code Online (Sandbox Code Playgroud)
是不是有类似的构造函数?
我有一个最终的 util 类,并且添加了一个私有构造函数来隐藏默认的公共构造函数。我如何通过 jacoco 覆盖率报告在 sonarqube 中获取此类的覆盖率并在 Jenkins 中构建?
public final class Util {
// My contructor
private Util() {
super();
}
}
Run Code Online (Sandbox Code Playgroud) 如何为私有构造函数编写@test类.我想用emma工具覆盖它.
public final class Product {
private Product() {
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以建议一个简单的方法?
谢谢.