2015-07-02 243 views
11

我试图用Mockito使用PowerMock执行单元测试时遇到问题。我需要PowerMockito来模拟静态方法。PowerMock和Java 8问题:InterfaceMethodrefInfo不能转换为MethodrefInfo

这些I'm使用的版本:

PowerMock 1.6.2 
Mockito 1.10.19 
JUnit 4.12 
Java 8 

当我添加注释@PrepareForTest(Graph.class)我得到以下错误:

java.lang.IllegalStateException: Failed to transform class with name  name.of.my.package.GraphUtil. Reason: javassist.bytecode.InterfaceMethodrefInfo cannot be cast to javassist.bytecode.MethodrefInfo 

我在读官方PowerMock谷歌页面,这是与javassist有关。但我有点失落,我不知道如何解决它。为了以防万一,我也尝试下载Powermock的最新SNAPSHOT(1.6.3-SNAPSHOT),但也没有工作。

任何人都可以帮助我吗?

在此先感谢

+1

井了Javassist的问题跟踪有(相关错误https://issues.jboss.org/browse/JASSIST-220 )以及Chiba先生于2014年7月22日合并了一项拉票请求(https://github.com/jboss-javassist/javassist/pull/11)。 我的第一个建议是确保你使用的是最新版本的javassist,如果升级到最新版本。 – pabrantes

+0

请将该评论添加为您自己的答案并接受,以免问题得不到解答。谢谢:) – pabrantes

回答

1

是的,那就是问题所在。 PowerMock对javassist有一个依赖关系,所以我只需要在我的pom中排除这个传递依赖关系,然后将依赖关系包含到固定版本的javassist中。这对我有效。谢谢!

+3

提到具有问题和修复的特定版本,而示例pom会帮助人们很多。 –

11

Francisco González's的答案,这是我必须做的:

<dependency> 
    <groupId>org.powermock</groupId> 
    <artifactId>powermock-module-junit4</artifactId> 
    <version>1.5.5</version> 
    <scope>test</scope> 
    <exclusions> 
     <exclusion> 
      <groupId>org.javassist</groupId> 
       <artifactId>javassist</artifactId> 
     </exclusion> 
    </exclusions>  
</dependency> 
<dependency> 
    <groupId>org.javassist</groupId> 
    <artifactId>javassist</artifactId> 
    <version>3.20.0-GA</version> 
    <scope>test</scope> 
</dependency> 
+0

如果项目的另一个依赖依赖于'javassist'(e.x.hibernate),那么它*不起作用。当您添加'javassist'依赖项时,您必须删除' test'。 – Arashsoft