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