mockito test在运行junit test时没有给出这样的方法错误,但是当在运行配置中手动添加jar时,它运行良好

我一直面临着一个特殊的问题。 基本上,当我正常运行我的Mockito / PowerMockito测试,即’Run as Junit Test’时,它会给我以下错误:

java.lang.NoSuchMethodError: org.mockito.mock.MockCreationSettings.isUsingConstructor()Z at org.mockito.internal.creation.instance.InstantiatorProvider.getInstantiator(InstantiatorProvider.java:10) at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:110) at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:58) at org.powermock.api.mockito.PowerMockito.mock(PowerMockito.java:203) at org.powermock.api.extension.listener.AnnotationEnabler.standardInject(AnnotationEnabler.java:106) at org.powermock.api.extension.listener.AnnotationEnabler.beforeTestMethod(AnnotationEnabler.java:54) at org.powermock.tests.utils.impl.PowerMockTestNotifierImpl.notifyBeforeTestMethod(PowerMockTestNotifierImpl.java:90) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:292) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:127) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:282) at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:86) at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:207) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:146) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:120) at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:33) at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:45) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:122) at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:106) at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53) at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

我曾尝试在maven依赖项和构建路径中添加所有必需的jar,但无济于事。

但是,我随后在运行配置 – >类路径 – >用户条目中手动添加了jar。 然后,我像往常一样运行测试,它显示绿色状态栏,即它完美运行。

请帮帮我。 我需要在没有这些令人烦恼的变化的情况下进行测试,这会影响我的工作。 我能做什么才能让我通常运行测试,即不用一直运行配置,只需在构建路径中添加jar然后“运行为junit test”?

在你的eclipse屏幕上尝试Cntrl + Shift + T. 检查你的结果是什么。 理想情况下,eclipse只能从一个依赖项中解析此类。 如果您获得多个结果,则可能需要在某些依赖项上添加排除项。

在此处输入图像描述

还要检查是否能够从命令提示符执行测试用例。 如果你能够做到这一点,那么这不是一个maven问题。 但如果此处出现问题,请检查您的依赖项。

对我来说,mockito版本正在创造问题。 如果您已在pom文件中明确添加,请删除mockito依赖项。 我刚刚删除 –

 testCompile 'org.mockito:mockito-all:1.9.5' 

我的gradle文件中的行。 让权力模拟解决并添加它自己需要的mockito依赖,而不是你强行添加一个可能导致冲突。

所以对我来说依赖是 –

 testCompile "org.powermock:powermock-module-junit4:1.6.4" testCompile "org.powermock:powermock-module-junit4-rule:1.6.4" testCompile "org.powermock:powermock-api-mockito:1.6.4" testCompile "org.powermock:powermock-classloading-xstream:1.6.4" 

除了junit和其他lib依赖项,你可能有。

您的IDE需要与Maven同步,这是您通过添加依赖项手动执行的操作。

不幸的是,Eclipse没有(或没有)提供开箱即用的这种行为(与IntelliJ无缝同步)。

以前的解决方案是使用Maven Eclipse插件完成的,但是查看文档似乎最新的方法是使用Eclipse的Eclipse Maven Integration插件。

我认为mockito版本存在问题 – 我刚刚更新 –

 testCompile group: 'org.mockito', name: 'mockito-all', version: '1.8.5' to testCompile group: 'org.mockito', name: 'mockito-all', version: '1.10.19'