【发布时间】:2018-12-03 16:13:47
【问题描述】:
我是 Java 和 Junit 的新手,
有人知道如何在 Junit 中为私有函数编写测试用例吗?
在 Google 进行一些研究后,我设置环境并在 Mock() 代理的帮助下为公共函数和模拟父类编写单元测试用例。
对于具有内联值参数的公共函数,我达到了我的期望并测试了正路径和负路径。
对于我遵循的私有方法
How do I test a private function or a class that has private methods, fields or inner classes?
Method method = targetClass.getDeclaredMethod(methodName, argClasses);
method.setAccessible(true);
return method.invoke(targetObject, argObjects);
对于字段:
Field field = targetClass.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(object, value);
代码:
public class universalConfiguration {
private Integer getTotalDocuments(Client client, String indexName, String indexType, QueryBuilder searchQueryBuilder) {
SearchResponse response = client.prepareSearch()
.setIndices(indexName)
.setTypes(indexType)
.setSize(0)
.setQuery(searchQueryBuilder)
.execute().actionGet();
return (int) response.getHits().totalHits;
}
}
这是我的代码我想用这个公共类测试这个私有方法,我尝试使用 getDeclaredMethod 和 setAccessible 来使用这个方法,但是我遇到了错误。
UniversalConfiguration universalConfiguration = new UniversalConfiguration();
getTotalDocuments getTotalDocuments= universalConfiguration .
getDeclaredMethod(getTotalDocuments,
client,
indexName,
indexType,
searchQueryBuilder);
getTotalDocuments.setAccessible(true);
getTotalDocuments 方法无法解析为类型
如果我犯了任何错误,请纠正我。
【问题讨论】:
-
您链接的线程中的最佳答案仍在 cmets 中,“测试私有方法的最佳方法不是直接测试它”。
-
请阅读(并关注)Java Naming Conventions
标签: java unit-testing junit mockito