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

Fra*_*lez 18 java powermock javassist

我在尝试使用PowerMock和Mockito执行单元测试时遇到了问题.我需要PowerMockito来模拟静态方法.

这些是我使用的版本:

PowerMock 1.6.2
Mockito 1.10.19
JUnit 4.12
Java 8
Run Code Online (Sandbox Code Playgroud)

当我添加注释@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
Run Code Online (Sandbox Code Playgroud)

我在官方的PowerMock Google页面中读到这与javassist有关.但我有点失落,我不知道如何解决它.

为了以防万一,我也尝试下载最新的Powermock SNAPSHOT(1.6.3-SNAPSHOT),但也没有用.

有人可以帮帮我吗?

提前致谢

Pra*_*ant 21

按照FranciscoGonzá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>
Run Code Online (Sandbox Code Playgroud)

  • 如果项目的另一个依赖项依赖于`javassist`(ex hibernate),它*不起作用*.添加`javassist`依赖项时,必须删除`<scope> test </ scope>`. (4认同)

Fra*_*lez 5

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

  • 提及具有问题和修复的特定版本,示例 pom 会对人们有很大帮助。 (7认同)

小智 5

    <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>
Run Code Online (Sandbox Code Playgroud)