Java PowerMock抛出NoSuchMethodError(setMockName)

Java PowerMock抛出NoSuchMethodError(setMockName),java,mockito,junit4,powermock,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.inter

我试图使用
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-module-junit4:1.5.6
  • org.powermock:powermock-mockito发布完整版:1.5.6

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

对于我来说,在Eclipse中,这个问题的修复是在Java构建路径中找到的。单击订单和导出选项卡。将Web应用程序库移动到底部。请注意,在适当的情况下,当Eclipse告诉您找不到第三方库源代码时,这也将允许您查看第三方库的源代码。

我的问题是由于我的项目(可传递的)依赖关系中的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>

org.hibernate
休眠实体管理器
3.5.1-最终版本
假如
javassist
javassist
我有

org.mockito 莫基托所有 1.8.4


除了powermock的依赖项之外,还添加到了我的pom.xml中,删除它对我来说很有效。

在我的例子中,它是一个冲突依赖项。 我在排除mockito核心工件后修复了它:

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

com.googlecode.catch-exception
捕获异常
org.mockito
莫基托磁芯
1.0.4
测试

确保
powermockito
mockito
版本对齐
如本版本表所示-

使用maven is查找
mockito
powermock 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
版本与
powermockito
使用的版本冲突,在我使用的
powermock 1.6.5
不支持
mockito 1.8.5


也考虑去除PowerMock、BytButy和Objistic依赖性。仅保留以下Mockito依赖项

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

org.mockito
莫基托磁芯
2.7.12
测试

这将修复大多数情况下的错误。

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

您能遵守并查看它是否修复了我最初使用的问题,但它会生成相同的错误。也许您应该添加完整的依赖关系树。这可能与我的IDE有关。我重建了项目,问题解决了。。。但是被另一个替代了。谢谢,这为我修复了它-基本上,如果你使用Powermock,你应该让Powermock定义Mockito的依赖项,而不是用一个可能过时的版本覆盖它们。这是正确的答案。Powermock和mockito都有冲突。对我也有用,不要明确添加mockito。让powermock根据其版本下载并解析依赖关系。如何查找-哪些依赖关系使用的是javaassist旧版本?BDW我正在使用gradle。。。请使用Gradle中的
:dependencies
任务查看哪些任务使用javassist。您可以使用诸如grep、less等实用程序来帮助搜索。找到使用它的对象后,将其排除,并重复该过程,直到排除所有javassist(可传递)依赖项。然后,要么向后工作,直到从另一个依赖项获得所需的javassist版本,要么显式添加所需的版本作为依赖项。至少我会这么做。
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>2.7.12</version>
        <scope>test</scope>
    </dependency>
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"