如何在Java应用程序中测试私有构造函数?
2022-08-31 22:20:20
如果一个类包含一堆静态方法,为了确保没有人错误地初始化这个类的实例,我做了一个私有构造函数:
private Utils() {
}
现在。。鉴于看不到构造函数,这怎么能被测试呢?这能被测试吗?
如果一个类包含一堆静态方法,为了确保没有人错误地初始化这个类的实例,我做了一个私有构造函数:
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();
}
}
测试代码的意图 ..始终:)
例如:如果构造函数是私有的要点是看不到,那么你需要测试的是这个事实,而不是别的。
使用反射 API 查询构造函数并验证它们是否具有私有属性集。
我会做这样的事情:
@Test()
public void testPrivateConstructors() {
final Constructor<?>[] constructors = Utils.class.getDeclaredConstructors();
for (Constructor<?> constructor : constructors) {
assertTrue(Modifier.isPrivate(constructor.getModifiers()));
}
}
如果你想对对象构造进行适当的测试,你应该测试公共API,它允许你获取构造的对象。这就是所述API应该存在的原因:正确构建对象,因此您应该针对该:)对其进行测试。