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