Sid*_*hta 22 java junit mockito powermock maven
我一直面临着一个特殊的问题.基本上,当我正常运行我的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"?
asg*_*asg 43
在你的eclipse屏幕上尝试Cntrl + Shift + T. 检查你的结果是什么.理想情况下,eclipse只能从一个依赖项中解析此类.如果您获得多个结果,则可能需要在某些依赖项上添加排除项.
还要检查是否能够从命令提示符执行测试用例.如果你能够做到这一点,那么这不是一个maven问题.但如果此处出现问题,请检查您的依赖项.
Ani*_*kur 15
对我来说,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依赖项之外你可能有.
其他答案给了我指导,但真正引发我问题的是我不小心导入了
import static org.mockito.ArgumentMatchers.eq;
当其余代码使用
import static org.mockito.Matchers.any;
你问有什么问题吗?
嗯,org.mockito.ArgumentMatchers是从 Mockito 2.23 中获取的,并且org.mockito.Matchers(以及其余的mockito 导入)是从 Mockito 1.9 中导入的。
在版本 2.23Matchers类中extends ArgumentMatchers(因此静态匹配器不再存在,它们在ArgumentMatchers类中)并标记为@Deprecated
无论如何,这触发了java.lang.NoSuchMethodError消息,解决方案是坚持使用 1.9 版本,然后简单地使用
import static org.mockito.Matchers.eq;