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"