我试图使用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-release-full:1.5.6

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

    最佳答案

    确保 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版本与powermockito使用的版本冲突,在我使用不支持powermock 1.6.5mockito 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
    

    关于java - PowerMock抛出NoSuchMethodError(setMockName),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27136752/

    10-11 04:24