PowerMock抛出NoSuchMethodError(setMockName)

时间:2014-11-25 21:11:48

标签: java mockito junit4 powermock

我正在尝试使用PowerMockito来模拟构造函数,但每次运行测试时都会出现以下错误:

java.lang.NoSuchMethodError: org.mockito.internal.creation.MockSettingsImpl.setMockName(Lorg/mockito/mock/MockName;)Lorg/mockito/internal/creation/settings/CreationSettings;
at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:107)
at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:60)
at org.powermock.api.mockito.internal.expectation.DefaultConstructorExpectationSetup.createNewSubstituteMock(DefaultConstructorExpectationSetup.java:105)
at org.powermock.api.mockito.internal.expectation.DefaultConstructorExpectationSetup.withAnyArguments(DefaultConstructorExpectationSetup.java:71)

我的项目中有以下PowerMock依赖项:

  • org.powermock:powermock模块-junit4:1.5.6
  • org.powermock:powermock-的Mockito离型全:1.5.6

我已跟踪项目的依赖关系树并修复了冲突,以便mockito-all:1.9.5包含在构建中。

7 个答案:

答案 0 :(得分:46)

确保 powermockitomockito版本一致,如此版本图表中所示 - MockitoUsage#supported-versions

Mockito                     | PowerMock
------------------------------------------------------------------------------
2.0.0-beta - 2.0.42-beta    |   1.6.5+
------------------------------------------------------------------------------
1.10.19                     |   1.6.4
1.10.8 - 1.10.x             |   1.6.2+
1.9.5-rc1 - 1.9.5           |   1.5.0 - 1.5.6
1.9.0-rc1 & 1.9.0           |   1.4.10 - 1.4.12
1.8.5                       |   1.3.9 - 1.4.9
1.8.4                       |   1.3.7 & 1.3.8
1.8.3                       |   1.3.6
1.8.1 & 1.8.2               |   1.3.5
1.8                         |   1.3
1.7                         |   1.2.5

使用maven查找mockitopowermock-mockito版本的简便方法是,

mvn dependency:tree | grep mockito
[INFO] |  \- org.mockito:mockito-core:jar:1.8.5:compile
[INFO] +- org.mockito:mockito-all:jar:1.8.5:compile
[INFO] +- org.powermock:powermock-api-mockito:jar:1.4.9:compile

问题可能是应用程序中mockito的{​​{1}}和powermockito使用的版本之间的冲突版本,在我使用powermock 1.6.5的情况下会发生冲突,如下所示不支持mockito 1.8.5

mvn clean dependency:tree | grep mockito
[INFO] +- org.mockito:mockito-all:jar:1.8.5:compile

[INFO] \- org.powermock:powermock-api-mockito:jar:1.6.5:compile
[INFO]    +- org.mockito:mockito-core:jar:1.10.19:compile
[INFO]    \- org.powermock:powermock-api-mockito-common:jar:1.6.5:compile

答案 1 :(得分:7)

我的问题是由于我的项目(传递)依赖项中的javassist版本冲突。我所做的是搜索在构建中放置旧版本javassist的所有依赖项,然后排除它们。例如:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>3.5.1-Final</version>
    <scope>provided</scope>
    <exclusions>
        <exclusion>
            <groupId>javassist</groupId>
            <artifactId>javassist</artifactId>
        </exclusion>
    </exclusions>
</dependency>

答案 2 :(得分:6)

我有

  

            org.mockito             的Mockito,所有             1.8.4

除了powermock的dependecies之外,

添加到我的pom.xml中,删除它对我有用。

答案 3 :(得分:0)

对我来说,在Eclipse中,在Java Build Path中找到了解决这个问题的方法。单击“订购和导出”选项卡。将Web App库移动到底部。请注意,在适当的情况下,当Eclipse告诉您无法找到源时,这也允许您查看第三方库的来源。

答案 4 :(得分:0)

就我而言,这是一种冲突依赖。 我在排除mockito-core工件后修复了它:

 <dependency>
        <groupId>com.googlecode.catch-exception</groupId>
        <artifactId>catch-exception</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-core</artifactId>
            </exclusion>
        </exclusions>
        <version>1.0.4</version>
        <scope>test</scope>
    </dependency>

答案 5 :(得分:0)

此外,请考虑完全删除PowerMock,bytebuddy和objenesis依赖项。仅保留以下Mockito依赖项。

    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>2.7.12</version>
        <scope>test</scope>
    </dependency>

这应该可以解决大多数情况下的错误。

答案 6 :(得分:0)

将springboot从1.5迁移到2.0.7时 springboot和powermock中的Mockito版本不同,因此明确给出了Mockito依赖项

这在迁移到springboot 2.0.7时是兼容的

testCompile "org.powermock:powermock-api-mockito2:${powermockVersion}"
testCompile group: 'org.mockito', name: 'mockito-core', version: '2.8.9'
testCompile "org.powermock:powermock-module-junit4:1.7.3"
testCompile "org.powermock:powermock-core:1.7.3"