根据Class
的javadoc返回类的类加载器。某些实现可能使用null来表示引导类加载器。
当getClassLoader返回null时,我们必须对逻辑进行单元测试。我们正在使用Java的Java实现(Java 6)。我们怎么能这样做。
答案 0 :(得分:1)
我的第一个想法是,只是嘲笑Class对象,但在另一个问题中提到:Mocking a class object using Mockito and PowerMockito
你不能。像Mockito,Easymock(和Powermock)这样的模拟对象库不能模拟由引导类加载器加载的类,因为它们已经在模拟对象库加载时加载。因此它无法操纵字节码。因此,一个简单的解决方法是查看是否可以使用由引导类加载器加载的类,例如java.lang
,java.net
,java.io
中的类。
例如String.class.getClassloader()
将返回null
。
如果你不能轻易地使用一个自举课程进行测试,那么我不会太担心那个分支,因为它无法在生产中执行。
答案 1 :(得分:0)
将目标类放入其自己的JAR中,然后使用-Xbootclasspath/a:testclass.jar
启动测试JVM。这将导致该JAR中的所有类都由引导类加载器加载。如果类需要其他依赖项,这将更加棘手。
或者,我过去的方法是重构代码,为测试目的添加一个特殊的入口点:
public void someMethod(Class c) {
someMethodImpl(c, c.getClassLoader());
}
// Exposed for test only.
void someMethodImpl(Class c, ClassLoader cl) {
...
}