java.lang.NoSuchMethodError:org.mockito.internal.RunnerFactory.createStrict(Ljava/lang/Class;)Lorg/mockito/internal/runners/InternalRunner;
我正在使用Mockito jar为Groovy编写Junit测试用例,但它给了我以下异常:java.lang.NoSuchMethodError:org.mockito.internal.RunnerFactory.createStrict(Ljava/lang/Class;)Lorg/mockito/internal/runners/InternalRunner;,java,unit-testing,groovy,junit,mockito,Java,Unit Testing,Groovy,Junit,Mockito,我正在使用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>(Mo
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)
下面是我的代码。我增加了必要的进口:
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)
}
}
出于某种原因,您的测试套件尝试从mockito版本>=2中包含的
org.mockito.junit
加载MockitoJunitRunner
。O.在该版本中,行:
at org.mockito.junit.MockitoJUnitRunner.<init>(MockitoJUnitRunner.java:152)
您也可以查看此文件以保留所有标准。在Mockito 1.10.19(从2014年开始)中,没有类org.Mockito.junit.MockitoJUnitRunner
。这一点后来在2.x中介绍。如果您真的想使用1.10.19,您可能应该使用正确的类org.mockito.runners.MockitoJUnitRunner
,然后该类就可以工作了
但我强烈建议使用更新的Mockito版本
mockito all
不再是可以依赖的正确工件。对于2.x,此人工制品不再维护。问题在于您的导入。
您的导入不包括导入runner替换以下导入
org.mockito.junit.MockitoJUnitRunner
与
我用Mockito core 2.13.0替换了Mockito all,工作起来像个骗子。你的答案解决了我正在从事的bnd项目中的类似问题。感谢您您的解决方案解决了我们的问题,但提出“org.mockito.runners.MockitoJUnitRunner”是不推荐的警告。Maciej Kowalski的回答在没有任何警告的情况下解决了问题。
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));
}
@Before
public void init() {
MockitoAnnotations.initMocks(this);
}
org.mockito.junit.MockitoJUnitRunner
org.mockito.runners.MockitoJUnitRunner;