如果一个类包含一堆静态方法,为了确保没有人错误地初始化该类的实例,我做了一个私有的构造函数:
private Utils() {
}
现在..鉴于无法看到构造函数,该如何进行测试?可以测试吗?
使用反射,您 可以 调用私有构造函数:
Constructor<Util> c = Utils.class.getDeclaredConstructor();
c.setAccessible(true);
Utils u = c.newInstance(); // Hello sailor
但是,您甚至可以做到这一点:
private Utils() {
throw new UnsupportedOperationException();
}
通过在构造函数中引发异常,可以防止所有尝试。
我也会自己上课final
,因为“因为”:
public final class Utils {
private Utils() {
throw new UnsupportedOperationException();
}
}
问题内容: 这是代码: 这是测试: 效果很好,该类已经过测试。但是Cobertura表示,该类的私有构造函数的代码覆盖率为零。我们如何向这样的私有构造函数添加测试覆盖率? 问题答案: 好吧,有很多方法可以使用反射等-真的值得吗?这是一个 永远不 应该 被调用 的构造函数,对吗? 如果您可以在类中添加注释或类似内容以使Cobertura理解不会被调用,请执行以下操作:我认为不值得人工添加覆盖范围。
我试图理解为什么在谈到构造函数时,类成员的可访问性之间存在差异。 考虑下面的例子: 的私有成员作为私有成员,不应从访问。对于字段和方法,情况确实如此,但构造函数似乎没有遵循相同的规则。 从JLS-8(6.6.1.确定可访问性)中,我们可以阅读: [...] 引用类型的成员(类、接口、字段或方法)或类类型的构造函数只有在类型可访问且声明该成员或构造函数允许访问时才可访问: > [……] 否则,成员或
问题内容: 构造函数可以私有吗?私有构造函数有什么用? 问题答案: 是的,构造函数可以是私有的。有不同的用途。一种这样的用法是用于单例设计反模式,我建议你不要使用它。另一个更合理的用法是委派构造函数。你可以让一个构造函数接受很多不同的选项,而这些选项实际上是实现细节,因此你将其设为私有,但是其余的构造函数将委托给它。 作为委派构造函数的示例,以下类允许你保存值和类型,但仅允许你对类型的子集进行保存
问题内容: 假设有一个类,其所有构造函数都声明为private。 例如。: 据我所知,将所有构造函数设为私有类似于将类“ This”声明为 final ,因此无法进行扩展。 但是,我收到的Eclipse消息给我的印象是这是可能的-可以扩展全构造函数私有类。看看这个: 当我尝试使用类似的方法扩展此类时 Eclipse给了我一个错误:“ 隐式超级构造函数This()对于默认构造函数不可见。必须定义一个
我试图从Spock测试中扩展GebSpec的类调用java构造函数。我有这样一个错误:“不允许构造函数;相反,定义一个'setup()'或'setup spec()'方法”。我需要打这样的电话: