我在尝试使用PowerMock和Mockito执行单元测试时遇到问题。我需要PowerMockito来模拟一个静态方法。
这些是我正在使用的版本:
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 Google的官方页面上读到,这与javassist有关。但我有点迷路了,我不知道怎么解决。
为了以防万一,我还尝试下载Powermock的最新SNAPSHOT(1.6.3-SNAPSHOT(,但也不起作用。
有人能帮我吗?
提前感谢
根据Francisco González的回答,这就是我必须做的:
<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>
是的,这就是问题所在。PowerMock有一个对javassist的依赖,所以我只需要在pom中排除这个可传递的依赖,然后再包括对固定版本的javassist。这对我很管用。谢谢!
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.22.0-GA</version>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<exclusions>
<exclusion>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>
红鲱鱼
当我在Android开发过程中遇到这个问题时,我只是对现有文件进行了一次测试。
删除测试并一次重新添加一行,我发现根本问题与TreeSet及其比较器的实例化方式有关。
YMMV。