在向我的当前项目(JDK1.6.0)中添加powermock (1.5.6和Easymad3.2)之后,我在测试方法中获得了一些测试失败,这些测试方法在以前非常好地工作:
com.sun.imageio.plugins.jpeg.JPEGImageReader.initReaderIDs(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;)V :java.lang.UnsatisfiedLinkError
以下代码失败:
BufferedImage img = null;
try {
img = ImageIO.read(this.getClass().getResourceAsStream("/example.jpg"));
}
catch (IOException e) {
fail(e.getMessage());
}powermock页面已经有了2009年的错误,但是没有修复,也没有解决办法。(回到32位是无稽之谈,因为这些方法没有powermock工作)那么有人知道如何修复这个问题吗?
更新I:切换到32位是没有选择的,而且这不是问题所在。如果我不使用PowerMock,那么在我的64位JVM中,每个测试都能很好地工作。
更新II:确定这里是请求的信息
更新III:扩展了类
因此,如果您评论行://@RunWith(PowerMockRunner.class),它正在工作。如果取消注释,则引发上述错误(再次!)
发布于 2015-03-04 20:24:16
解决方案是告诉PowerMock忽略与其自定义类加载程序冲突的所有JRE类。也就是说,向测试类添加以下注释:
@PowerMockIgnore({"javax.imageio.*", "javax.security.*"})(注意,注释的value属性接受一个正则表达式数组;它不支持单个字符串中多个逗号分隔的表达式。)
为什么需要这样做的原因是
App调用到javax.imageio.ImageIO时,它将尝试加载和初始化内部类com.sun.imageio.plugins.jpeg.JPEGImageReader,然后尝试从调用类加载器加载一些其他com.sun.imageio类;JPEGImageReader类中的一个本机方法完成的--也许它也试图加载一些本机库)。https://stackoverflow.com/questions/28698895
复制相似问题