web-dev-qa-db-ja.com

mockitoテストでは、junitテストとして実行した場合、このようなメソッドエラーは発生しませんが、実行構成でjarを手動で追加すると、正常に実行されます

私は独特の問題に直面しています。基本的に、Mockito/PowerMockitoテストを正常に実行すると、つまり「Junitテストとして実行」すると、次のエラーが表示されます:

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)

私は、Maven依存関係とビルドパスに必要なすべてのjarを追加しようとしましたが、役に立ちませんでした。

ただし、実行構成->クラスパス->ユーザーエントリでjarを手動で追加しました。次に、通常どおりテストを実行し、緑色のステータスバーを表示しました。つまり、完全に実行されました。

これで私を助けてください。私の仕事に影響するこれらの迷惑な変更なしでテストを実行する必要があります。テストを通常どおり実行できるようにするにはどうすればいいですか?つまり、設定を実行するのではなく、ビルドパスにjarを追加して「junitテストとして実行」するだけでいいですか?

20
Siddharth Mehta

Eclipse画面でCntrl + Shift + Tを試してください。結果を確認してください。理想的には、Eclipseは1つの依存関係からのみこのクラスを解決する必要があります。複数の結果が得られる場合、特定の依存関係に除外を追加する必要がある場合があります。

enter image description here

また、コマンドプロンプトからテストケースを実行できるかどうかも確認します。それができれば、それはMavenの問題ではありません。ただし、ここで何かが失敗した場合は、依存関係を確認してください。

41
asg

私にとってmockitoバージョンは問題を引き起こしていました。 pomファイルに明示的に追加した場合は、mockito依存関係を削除してください。削除しました-

testCompile 'org.mockito:mockito-all:1.9.5' 

私のgradleファイルからの行。競合につながる可能性があるものを強制的に追加する代わりに、パワーモックが解決し、必要なmockito依存関係を追加します。

だから私にとって依存関係は-

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" 

あなたが持っているかもしれないjunitや他のlib依存関係以外。

14
Aniket Thakur

Mockitoバージョンに問題があると思います-コードを更新しました-

testCompile group: 'org.mockito', name: 'mockito-all', version: '1.8.5'

testCompile group: 'org.mockito', name: 'mockito-all', version: '1.10.19'
1
Pravind Kumar

IDEはMavenと同期する必要があります。これは、依存関係を追加して手動で行うことです。

残念ながら、Eclipseはこの動作をすぐに提供しません(または提供しませんでした)(シームレスに同期するIntelliJとは異なります)。

以前はソリューションが Maven Eclipseプラグイン で行われていましたが、ドキュメントを見ると、これを行うための最新の方法は Eclipse Maven Integration IDEのプラグインであるようです。

1
Nick Holt