我有一个遗留类,我添加了一些方法,并且需要创建一些仅测试这4种方法的JUnit测试。被测类有一个参数构造函数,用于初始化字符串。但是,在构造函数中调用一个私有方法,该方法使用属性文件初始化几个私有类和一个数据源。我要测试的方法没有使用任何这些类。
我刚开始编写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;
}
}
有什么方法可以模拟这个私有方法来测试我编写的方法?
答案 0 :(得分:0)
Mockito不支持模拟私有方法。
以下是Mockito's FAQ的摘录:
为什么Mockito不模拟私有方法?
首先,我们并不是在嘲笑私有方法。我们刚刚 不在乎私有方法,因为从 测试,私有方法不存在。这有两个原因 Mockito不会模拟私有方法:
- 这需要对类加载器进行黑客攻击,而这绝不是防弹措施, 更改API(您必须使用自定义测试运行器,为类添加注释, 等等。)。
- 这很容易解决-只需更改 从私有到受包保护(或受保护)的方法。
- 这需要 团队花时间实施和维护它。而且它不 给定点(2)和已经实施的事实是有意义的 在不同的工具(powermock)中。
- 最后...模拟私有方法是 提示面向对象的理解存在问题。 在OO中,您希望对象(或角色)进行协作,而不是方法。忘记 关于Pascal和程序代码。思考对象。
如果您真的想模拟私有方法,请查看PowerMock。