J'ai été confronté à un problème particulier. En gros, lorsque j’exécute normalement mon test Mockito/PowerMockito, c’est-à-dire «Run as Junit Test», l’erreur suivante apparaît:
Java.lang.NoSuchMethodError: org.mockito.mock.MockCreationSettings.isUsingConstructor()Z
at org.mockito.internal.creation.instance.InstantiatorProvider.getInstantiator(InstantiatorProvider.Java:10)
at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.Java:110)
at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.Java:58)
at org.powermock.api.mockito.PowerMockito.mock(PowerMockito.Java:203)
at org.powermock.api.extension.listener.AnnotationEnabler.standardInject(AnnotationEnabler.Java:106)
at org.powermock.api.extension.listener.AnnotationEnabler.beforeTestMethod(AnnotationEnabler.Java:54)
at org.powermock.tests.utils.impl.PowerMockTestNotifierImpl.notifyBeforeTestMethod(PowerMockTestNotifierImpl.Java:90)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.Java:292)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.Java:127)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.Java:82)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.Java:282)
at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.Java:86)
at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.Java:49)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.Java:207)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.Java:146)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.Java:120)
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.Java:33)
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.Java:45)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.Java:122)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.Java:106)
at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.Java:53)
at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.Java:59)
at org.Eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.Java:50)
at org.Eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.Java:38)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:467)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:683)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.Java:390)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.Java:197)
J'avais essayé d'ajouter tous les fichiers requis dans la dépendance maven ainsi que dans le chemin de génération, mais en vain.
Cependant, j'ai ensuite ajouté les fichiers jar manuellement dans les configurations d'exécution-> classpath-> user. Ensuite, j’ai exécuté le test normalement et la barre d’état verte, c’est-à-dire qu’il s’est parfaitement déroulé.
S'il vous plaît aidez-moi sur ce point. Je dois exécuter le test sans ces changements gênants qui pourraient affecter mon travail. Que puis-je faire pour que je puisse exécuter le test normalement, c’est-à-dire sans aller jusqu’à exécuter des configurations, mais simplement en ajoutant les fichiers jar dans le chemin de construction et ensuite «exécuter en tant que test junit»?
Essayez Cntrl + Shift + T sur votre écran Eclipse. Vérifiez quels sont vos résultats. Idéalement, Eclipse ne devrait résoudre cette classe qu’à partir d’une dépendance. Si vous obtenez plusieurs résultats, vous devrez peut-être ajouter une exclusion sur certaines dépendances.
Vérifiez également si vous pouvez exécuter vos cas de test à partir de la commande Invite. Si vous êtes capable de le faire, alors ce n'est pas un problème majeur. Mais si quelque chose échoue ici, vérifiez vos dépendances.
Pour moi, la version mockito créait des problèmes. Supprimez simplement la dépendance mockito si vous avez ajouté explicitement dans votre fichier pom. Je viens de retirer -
testCompile 'org.mockito:mockito-all:1.9.5'
ligne de mon fichier de classement. Permet à la puissance de simuler la résolution et d'ajouter la dépendance mockito dont elle a besoin au lieu de vous forcer à en ajouter une qui pourrait entraîner un conflit.
Donc, pour moi, les dépendances sont -
testCompile "org.powermock:powermock-module-junit4:1.6.4"
testCompile "org.powermock:powermock-module-junit4-rule:1.6.4"
testCompile "org.powermock:powermock-api-mockito:1.6.4"
testCompile "org.powermock:powermock-classloading-xstream:1.6.4"
autre que Junit et d’autres dépendances de bibliothèque que vous pourriez avoir.
Votre IDE doit être synchronisé avec Maven, ce que vous faites manuellement en ajoutant les dépendances.
Malheureusement, Eclipse n’a pas (ou n’a pas) fourni ce comportement immédiat (à la différence d’IntelliJ qui se synchronise de manière transparente).
Auparavant, la solution était utilisée avec le plugin Maven Eclipse , mais il semble que la dernière solution consiste à utiliser le plugin Eclipse Maven Integration pour l'EDI.
Je pense qu'il y a un problème avec la version mockito - je viens de mettre à jour -
testCompile group: 'org.mockito', name: 'mockito-all', version: '1.8.5' to
testCompile group: 'org.mockito', name: 'mockito-all', version: '1.10.19'