PowerMockito
を使用してコンストラクターをモックしようとしていますが、テストを実行するたびに次のエラーが発生します。
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)
私のプロジェクトには次のPowerMockの依存関係があります。
プロジェクトの依存関係ツリーをトレースし、競合を修正して、mockito-all:1.9.5
はビルドに含まれます。
私の問題は、プロジェクトの(推移的な)依存関係でjavassistのバージョンが競合するためです。私がやったことは、古いバージョンのjavassistをビルドに含めるすべての依存関係を検索し、それらを除外することでした。例えば:
<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>
持っていた
org.mockito mockito-all 1.8.4
powermockの依存関係とは別にpom.xmlに追加し、これを削除しました。
私にとって、Eclipseでは、この問題の修正はJava Build Path。Order and Exportタブをクリックします。WebApp Librariesをbottomに移動します。注、適切な場合、これにより、ソースが見つからないとEclipseから通知されたときに、サードパーティライブラリのソースを表示することもできます。
私の場合、それは競合依存関係でした。 mockito-coreアーティファクトを除外した後、修正しました。
<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>