Java 如何用Mockito模拟被测类中的私有类成员

Java 如何用Mockito模拟被测类中的私有类成员,java,unit-testing,mockito,Java,Unit Testing,Mockito,我有一个遗留类,我添加了一些方法,需要创建一些JUnit测试,只测试这4个方法。被测试的类有一个初始化字符串的1参数构造函数。但是,在中,构造函数调用一个私有方法,该方法使用属性文件初始化几个私有类和一个数据源。我要测试的方法不使用这些类中的任何一个 我刚开始编写JUnit测试,不知道如何模拟这个私有方法,或者它是否可行。 正在测试的类的构造函数是: public ClassUnderTest(String wlUrl) throws Exception { try { this.url

我有一个遗留类,我添加了一些方法,需要创建一些JUnit测试,只测试这4个方法。被测试的类有一个初始化字符串的1参数构造函数。但是,在中,构造函数调用一个私有方法,该方法使用属性文件初始化几个私有类和一个数据源。我要测试的方法不使用这些类中的任何一个

我刚开始编写JUnit测试,不知道如何模拟这个私有方法,或者它是否可行。 正在测试的类的构造函数是:

public ClassUnderTest(String wlUrl) throws Exception {
try {
    this.url = wlUrl;
    initialize();
} catch (Exception ex) {
    throw ex;
}
} initialize方法是私有的,它实例化了几个私有类,我不想在我想要测试的方法中使用它们

private void initialize() throws Exception {
    try {
        PropertyManager.getInstance();
        logAdapter = LogAdapter.getInstance(PropertyManager.getProperty("LOG_CONFIG_FILE"));    
        log20 = new ServerLogging20();
        ds = (javax.sql.DataSource) ctx.lookup(PropertyManager.getProperty("DATASOURCE"));
        setInitialContext(url);
    } catch (Exception e) {
        log.error("ERROR instantiating PropertyManager & LogAdapter  - " + e.getMessage());
        throw e;
    }
}

有没有办法模拟这个私有方法来测试我编写的方法?

Mockito不支持模拟私有方法。 以下是一段摘录:

为什么Mockito不模拟私有方法

首先,我们不是教条式地嘲笑私有方法。我们只是 不要关心私有方法,因为从 在测试中,私有方法不存在。这里有几个原因 Mockito不模拟私有方法:

它需要对从来都不是防弹的类装入器进行黑客攻击 更改API您必须使用自定义测试运行程序、注释类、, 等 这很容易解决-只需更改 方法从private到package protected或protected。 它需要 团队需要花时间实施和维护它。但事实并非如此 考虑到第2点和它已经实现的事实,这是有意义的 在不同的工具powermock中。 最后模拟私有方法是一个非常复杂的问题 提示面向对象的理解有问题。 在OO中,您希望对象或角色协作,而不是方法。忘记 关于pascal和过程代码。从对象中思考。 如果您真的想模拟私有方法,请查看