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

时间:2017-12-05 11:18:16

标签: java unit-testing groovy 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>(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)
    }


}

3 个答案:

答案 0 :(得分:5)

出于某种原因,您的测试套件会尝试从Mockito版本中包含的MockitoJunitRunner加载org.mockito.junit&gt; = 2. 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));
    }

此处加载的RunnerFactory来自版本1.x,因为Mockito 2.x中引入了createStrict

因此,请浏览pom依赖关系树,找出哪个工件隐式将Mockito 2.x依赖项添加到项目中并将其排除。

或者..作为变通方法,而不是@RunWith(MockitoJUnitRunner.class),您可以使用:

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

答案 1 :(得分:4)

在Mockito 1.10.19(自2014年起)中,没有班级 <div layout="row" layout-align="center"> <md-button class="btn" ng-click="vm.modifyPackage(timPackage,timPackage.minutes,false)"> - </md-button> <span class="md-subhead">{{ timPackage.minutes }} Minutes </span> <md-button class="btn" ng-click="vm.modifyPackage(timPackage,timPackage.minutes,true)"> + </md-button> </div> <div layout="row" layout-align="center"> <md-button class="btn" ng-click="vm.modifyPackage(timPackage,timPackage.sms,false)"> - </md-button> <span class="md-subhead">{{ timPackage.sms }} SMS </span> <md-button class="btn" ng-click="vm.modifyPackage(timPackage,timPackage.sms,true)"> + </md-button> </div> <div layout="row" layout-align="center"> <md-button class="btn" ng-click="vm.modifyPackage(timPackage,timPackage.megabytes,false)"> - </md-button> <span class="md-subhead">{{ timPackage.megabytes }}GB Internet </span> <md-button class="btn" ng-click="vm.modifyPackage(timPackage,timPackage.megabytes,true)"> + </md-button> </div> 。这是后来在2.x中介绍的。如果你真的想使用1.10.19,你可能应该使用当时正确的类org.mockito.junit.MockitoJUnitRunner

但我强烈建议使用更新的Mockito版本。 org.mockito.runners.MockitoJUnitRunner根本不再是依赖的正确工件。 2.x这个人工制品不再维护了。

答案 2 :(得分:3)

问题出在您的进口商品之内。 您的导入不包括导入运行器,请替换以下导入

org.mockito.junit.MockitoJUnitRunner

使用

 org.mockito.runners.MockitoJUnitRunner;
相关问题