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

2022-09-02 09:44:43

我在尝试使用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的最新快照(1.6.3-SNAPSHOT),但也没有工作。

任何人都可以帮我吗?

提前致谢


答案 1

根据弗朗西斯科·冈萨雷斯的回答,这就是我必须做的:

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

答案 2

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


推荐