PowerMock 和 Java 8 问题:InterfaceMethodrefInfo 无法转换为 MethodrefInfo

PowerMock and Java 8 issue: InterfaceMethodrefInfo cannot be cast to MethodrefInfo

我在尝试使用 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),但也没有用。

有人能帮帮我吗?

提前致谢

是的,这就是问题所在。 PowerMock 对 javassist 有依赖性,所以我只需要在我的 pom 中排除该传递依赖性,然后再包含对固定版本的 javassist 的依赖性。这对我有用。谢谢!

根据 的回答,这就是我必须做的:

<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>
    <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.