PowerMock lance NoSuchMethodError (setMockName)

j'essaie de me moquer d'un constructeur en utilisant PowerMockito mais chaque fois que j'exécute le test j'obtiens l'erreur suivante:

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)

J'ai les dépendances PowerMock suivantes dans mon projet:

  • org.powermock: powermock-module-junit4: 1.5.6
  • org.powermock:powermock-mockito-release-plein:1.5.6

j'ai tracé l'arbre des dépendances de mon projet et corrigé les conflits de sorte que mockito-all:1.9.5 est inclus dans la construction.

15
demandé sur Psycho Punch 2014-11-26 00:11:48

5 réponses

assurez-vous que powermockito et mockito les versions sont alignées comme dans cette version graphique -MockitoUsage#prise en charge-les 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

moyen Facile de trouver mockito et powermock-mockito version utilisant maven is,

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

pourrait être le Problème des versions contradictoires mockito dans l'application et celui qui powermockito utilisations, en conflit comme ci-dessous dans mon cas où j'utilise powermock 1.6.5 qui ne supporte pas 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
40
répondu prayagupd 2017-10-15 08:30:44

Mon problème était dû à des versions contradictoires javassist dans mon projet (transitif) dépendances. Ce que j'ai fait, c'est rechercher toutes les dépendances qui ont mis l'ancienne version de javassist dans la compilation, puis les exclure. Par exemple:

<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>
7
répondu Psycho Punch 2015-02-23 17:07:08

j'ai eu

org.mockito mockito-tous les 1.8.4

ajouté à mon pom.xml mis à part les dépendances de powermock, enlever ça a marché pour moi.

6
répondu Abhijeet 2016-09-23 20:30:04

pour moi, dans Eclipse, la solution à ce problème a été trouvée dans Java Build Path. Cliquez sur l'onglet commander et exporter. Déplacer les bibliothèques D'applications Web vers bas. Notez que, le cas échéant, cela vous permettra également de voir la source des bibliothèques tierces lorsque Eclipse vous indique que la source ne peut pas être trouvée.

1
répondu ununiform 2014-12-22 17:34:33

Dans mon cas, c'était un conflit de dépendance. J'ai eu le fixer après exclure mockito-core artefact:

 <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>
0
répondu Vitaly 2016-10-08 20:46:21