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