我的私人构造函数在反思上检查为什么是公众的



我(在没有这个问题的其他许多util类中)一个fileutil的类Fileutil,该类未能使用私有构造函数。

类定义是:

public final class FileUtil {
    /**
     * Hidden constructor to prevent instantiation.
     */
    private FileUtil() {
    }
    // ...
    // many static methods
}

如上所述,我还有许多其他课程,这些课程都经过私人构造函数测试。测试方法是:

@Test
public void testPrivateConstructor() throws Exception {
    Constructor<FileUtil> constructor = FileUtil.class.getDeclaredConstructor();
    Assert.assertTrue("Constructor is not private", Modifier.isPrivate(constructor.getModifiers()));
    constructor.setAccessible(true);
    constructor.newInstance();
}

但对于此类 - 仅对于此类 - isprivate()方法返回false,如果在调试器中检查构造函数确实显示为公共。但是,如果试图以编程方式调用构造函数,Eclipse告诉我该方法不可见。

我正在使用Eclipse和Maven工作,并且在调用Maven build时在Eclipse中以及命令行中显示的问题显示。因此,这确实是一个Java问题,但是由于我在整个库中使用这种模式而没有问题,所以我不知道为什么它仅在此类中失败。

有什么想法?

第一个猜测;这些不是您要寻找的fileutil。

打印出FileUtil.class.getName()。例如:

System.out.println("FileUtil classname: " + FileUtil.class.getName());

感谢您的回答。但是,问题是由完全不同的东西引起的:

在其他一些测试中,我不得不模拟此类的一些方法。由于所有方法都是静态的,所以我必须使用

@PrepareForTest(FileUtil.class)

在单位测试类上。我想这就是我在testprivateconstructor()方法中获得带有公共构造函数的模拟对象的原因。

我重新分配了所有需要嘲笑的测试,并从包含testprivateconstructor()方法的测试类中删除了@preparefortest(fileutil.class)。现在它按预期工作。

希望如果有人再次遇到同一问题,这会有所帮助。

相关内容

  • 没有找到相关文章

最新更新