java - 如何修复 Mockito InvalidUseOfMatchers 错误
问题描述
我正在尝试使用 Mockito 来模拟一个方法,但是,我不断收到错误。我试图用这些弹簧注释设置 Mockito -
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class)
@ActiveProfiles("test")
@SpringBootTest
@PrepareForTest({MyClass.class})
public class TesterTest {
@MockBean
private MyClass myClass;
然后我使用这个 Mockito 调用 -
Mockito.when(myClass.method(Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.anyMap(), Mockito.anyInt(), Mockito.anyInt()))
.thenReturn(output);
尝试模拟这种方法 -
public Map<String,myObject> method(String string, Class<?> cc, ReflectionObject ro, Method method, Map<String, MyObject> objMap, int index, int maxIndex) {
我得到这个错误 -
java.lang.NoSuchMethodError: com.hd.utils.MyClass.method(Ljava/lang/String;Ljava/lang/Class;Lcom/homedepot/supplychain/replenishment/service/ReflectionObject;Ljava/lang/reflect/Method;Ljava/util/Map;II)Ljava/util/Map;
at com.beam.TesterTest.test(TesterTest.java:159)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
at org.powermock.modules.junit4.internal.impl.DelegatingPowerMockRunner$2.call(DelegatingPowerMockRunner.java:149)
at org.powermock.modules.junit4.internal.impl.DelegatingPowerMockRunner$2.call(DelegatingPowerMockRunner.java:141)
at org.powermock.modules.junit4.internal.impl.DelegatingPowerMockRunner.withContextClassLoader(DelegatingPowerMockRunner.java:132)
at org.powermock.modules.junit4.internal.impl.DelegatingPowerMockRunner.run(DelegatingPowerMockRunner.java:141)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:121)
at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:57)
at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Misplaced argument matcher detected here:
You cannot use argument matchers outside of verification or stubbing.
Examples of correct usage of argument matchers:
when(mock.get(anyInt())).thenReturn(null);
doThrow(new RuntimeException()).when(mock).someVoidMethod(anyObject());
verify(mock).someMethod(contains("foo"))
Also, this error might show up because you use argument matchers with
methods that cannot be mocked.
Following methods *cannot* be stubbed/verified:
final/private/equals()/hashCode().
Mocking methods declared on non-public parent classes is not supported.
如果我将弹簧注释更改为此-
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@ActiveProfiles("test")
我也得到同样的错误。有谁知道我在这里做错了什么?如果我最后将任何调用更改为硬编码整数,它就不会再抱怨这些了,但我不能对我的所有参数都这样做......
解决方案
推荐阅读
- bash - Curl 使用变量而不是手动编写的 URL 引发错误 (3)
- amazon-web-services - 许多 aws sso-admin 命令以 403 失败
- javascript - How to create a JS Date object from weekday and time string
- python - 将数据抓取到 xlsx 文件中
- javascript - 计算滚动以在自定义栏上按比例显示
- python - 如何将文本放在中心以便您可以清楚地看到它?以及如何去掉每个数字末尾的零?
- reactjs - 反应私有路由不呈现内容
- spring-boot - 带 Spring 的 ZeroMQ (spring-integration-zeromq)
- python - 使用正则表达式根据单引号拆分熊猫行中的列表
- jquery - jQuery:删除一个特定的点击处理程序保留其他人