从Ant运行JUnit测试时返回null的java getPackage()
我在运行JUnit测试时遇到问题
它在Eclipse中运行良好,但现在我尝试使用Ant从命令行运行它。问题是以下代码返回null:getClass().getPackage()
我正在运行JUnit测试,如下所示:
<junit fork="no" printsummary="yes" haltonfailure="no">
<classpath refid="junit.classpath" />
<batchtest fork="yes" todir="${reports.junit}">
<fileset dir="${junit.classdir}">
<include name="**/FileHttpServerTest.class" />
<exclude name="**/*$*" />
</fileset>
</batchtest>
<formatter type="xml" />
...
我在谷歌上搜索了这类错误,并找到了大量关于类加载器错误行为的参考资料。但我发现没有任何东西能给我足够的信息来解决我的问题
我真的需要getClass().getPackage()
不返回null。有人能帮我吗
谢谢, 菲尔
# 1 楼答案
我不确定您要在哪个对象上执行getClass()。getPackage()? 看看API Javadoc对这个方法的描述,我猜问题在于,当您从命令行运行JUnit时,引导类加载器正在加载JUnit,而您正在执行getPackage()操作的对象是由一个子类加载器加载的
不确定这是否有意义,但由于getPackage正在尝试使用引导类加载器定位包,并且标准类加载器行为不查看其子级,因此它返回null
如果你能提供更多关于你正在做这个操作的对象的信息,我可以说得更具体一些
# 2 楼答案
如果是类加载器的错误,则始终可以使用不同的类加载器加载相同的类:
这里的问题是如何找到类路径URL(
urlsToClasses
)。我不熟悉JUnit类加载器,所以您可以尝试将Thread.currentThread().getContextClassLoader()
转换为URLClassLoader
,看看它是否可以帮助您获取这些URL# 3 楼答案
试着用
junit fork="yes"
运行测试,这将相当合理地隔离类加载,并可能解决您的问题