web-dev-qa-db-fra.com

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

J'écris mes tests Junit pour Groovy à l'aide du pot Mockito, mais il me donne l'exception suivante:

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)

Ci-dessous la liste des pots que j'ai:

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

Ci-dessous mon code. J'ai ajouté les importations nécessaires:

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)
    }


}
6
LowCool

Pour une raison quelconque, votre suite de tests essaie de charger la MockitoJunitRunner à partir du org.mockito.junit contenu dans les versions de Mockito> = 2. O. Dans cette version, la ligne:

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

fait ceci:

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));
    }

et la RunnerFactory chargée ici provient de la version 1.x, car createStrict a été introduit dans Mockito 2.x.

Parcourez donc l’arborescence des dépendances et recherchez quel artefact ajoute implicitement la dépendance Mockito 2.x à votre projet et excluez-le.

Vous pouvez également utiliser la solution suivante au lieu de @RunWith(MockitoJUnitRunner.class):

@Before
public void init() {
    MockitoAnnotations.initMocks(this);
}
5
Maciej Kowalski

Dans Mockito 1.10.19 (qui date de 2014), il n'y a pas de classe org.mockito.junit.MockitoJUnitRunner. Cela a été introduit plus tard dans 2.x. Si vous voulez vraiment utiliser 1.10.19, vous devriez probablement utiliser la classe alors correcte org.mockito.runners.MockitoJUnitRunner qui devrait alors fonctionner.

Mais je vous recommande fortement d'utiliser une version plus récente de Mockito. mockito-all n'est tout simplement plus le bon artefact à dépeden. Avec 2.x, cet artefact n'était plus maintenu.

3
Vampire

Le problème réside dans vos importations . Vos importations n'incluent pas l'importation coureur remplacer l'importation suivante

org.mockito.junit.MockitoJUnitRunner

avec

 org.mockito.runners.MockitoJUnitRunner;
0
malvern dongeni