web-dev-qa-db-ja.com

java.lang.NoSuchMethodError:org.mockito.internal.runners.RunnerFactory.createStrict(Ljava / lang / Class;)Lorg / mockito / internal / runners / InternalRunner;

Mockito jarを使用してGroovyのJunitテストケースを作成していますが、次の例外が発生します。

Java.lang.NoSuchMethodError: org.mockito.internal.runners.RunnerFactory.createStrict(Ljava/lang/Class;)Lorg/mockito/internal/runners/InternalRunner;
at org.mockito.junit.MockitoJUnitRunner.<init>(MockitoJUnitRunner.Java:152)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:62)
at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
at Java.lang.reflect.Constructor.newInstance(Constructor.Java:423)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.Java:104)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.Java:86)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.Java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.Java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.Java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.Java:33)
at org.Eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.Java:84)
at org.Eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.Java:70)
at org.Eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.Java:43)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:444)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:675)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.Java:382)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.Java:192)

以下は私が持っているjarリストです:

cglib-nodep-2.2.2
javassist-3.19.0-GA
junit-4.12
mockito-all-1.10.19
objenesis-2.5
powermock-mockito-1.6.2-full

以下は私のコードです。必要なインポートを追加しました:

package test.service
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.InjectMocks
import org.mockito.Mock
import org.mockito.junit.MockitoJUnitRunner
import static org.mockito.Mockito.when;

@RunWith(MockitoJUnitRunner.class)
class SyncImplTest {

    @InjectMocks
    SyncThreatImpl  fixture;

    @Mock
    RpcConfigurationLoader rpcConfigurationLoader

    @Test
    public void testRpcConfig(){
        RpcApiInfo rpcApiInfo =  new RpcApiInfo();
        when(rpcConfigurationLoader.loadConfiguration()).thenReturn(rpcApiInfo)
    }


}
8
LowCool

何らかの理由で、テストスイートは、Mockitoバージョン> = 2に含まれる_org.mockito.junit_からMockitoJunitRunnerをロードしようとします。O。そのバージョンでは、次の行:

_at org.mockito.junit.MockitoJUnitRunner.<init>(MockitoJUnitRunner.Java:152)
_

これを行っています:

_public MockitoJUnitRunner(Class<?> klass) throws InvocationTargetException {
        //by default, StrictRunner is used. We can change that potentially based on feedback from users
        this(new StrictRunner(new RunnerFactory().createStrict(klass), klass));
    }
_

createStrictがMockito 2.xで導入されたため、ここで読み込まれるRunnerFactoryはバージョン1.xからのものです。

したがって、pom依存関係ツリーを調べて、プロジェクトに暗黙的にMockito 2.x依存関係を追加し、除外するアーティファクトを見つけます。

または、回避策として、@RunWith(MockitoJUnitRunner.class)の代わりに以下を使用できます。

_@Before
public void init() {
    MockitoAnnotations.initMocks(this);
}
_

また、この Mockitoチートシート をチェックして、すべての標準を手元に置いておくことができます。

8
Maciej Kowalski

問題はインポートにあります。インポートにはインポートランナーが含まれていません。次のインポートを置き換えます

org.mockito.junit.MockitoJUnitRunner

 org.mockito.runners.MockitoJUnitRunner;
6
malvern dongeni

Mockito 1.10.19(2014年以降)には、org.mockito.junit.MockitoJUnitRunnerクラスはありません。これは後で2.xで導入されました。 1.10.19を本当に使用したい場合は、おそらく正しいクラスorg.mockito.runners.MockitoJUnitRunnerを使用する必要があります。

しかし、代わりに新しいMockitoバージョンを使用することを強くお勧めします。 mockito-allは、もはや依存する適切なアーティファクトではありません。 2.xでは、このアーティファクトは維持されなくなりました。

6
Vampire