web-dev-qa-db-fra.com

PowerMock émet NoSuchMethodError (setMockName)

J'essaie de me moquer d'un constructeur en utilisant PowerMockito mais à chaque fois que je lance le test, l'erreur suivante apparaît:

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-full: 1.5.6

J'ai tracé l'arbre de dépendance de mon projet et résolu les conflits afin que mockito-all:1.9.5 soit inclus dans la construction.

15
Psycho Punch

Mon problème était dû aux versions conflictuelles de javassist dans les dépendances (transitives) de mon projet. Ce que j'ai fait était de rechercher toutes les dépendances qui mettaient l'ancienne version de javassist dans la construction, puis de 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
Psycho Punch

Assurez-vous que les versions powermockito et mockito sont alignées comme dans ce tableau de versions - 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

Un moyen facile de trouver la version mockito et powermock-mockito en utilisant maven est,

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

Le problème pourrait provenir des versions conflictuelles de mockito dans l'application et de celle utilisée par powermockito, en conflit comme ci-dessous dans le cas où j'utilise powermock 1.6.5 qui ne prend pas en charge 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
45
prayagupd

J'ai eu 

org.mockito mockito-tous 1.8.4 

ajouté à mon pom.xml en dehors des dépendances de powermock, le fait de le supprimer fonctionnait pour moi.

6
Abhijeet

Pour moi, dans Eclipse, le correctif de ce problème a été trouvé dans Java Build Path. Cliquez sur l'onglet Order and Export. Déplacez les bibliothèques d'applications Web vers en bas . Notez que, le cas échéant, cela vous permettra également d’afficher la source des bibliothèques tierces lorsque Eclipse vous indiquera que la source est introuvable.

0
ununiform

Dans mon cas, il s’agissait d’une dépendance aux conflits .

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