Java 模拟挂起函数需要一个额外的参数-Mockito

Java 模拟挂起函数需要一个额外的参数-Mockito,java,android,kotlin,mocking,mockito,Java,Android,Kotlin,Mocking,Mockito,我试图模拟一个接受3个参数的挂起函数,但当我试图模拟它时,它要求4个参数 suspend fun notifyBandSuspend(serviceType: String, id: String, action: TimeAction): GenericResponse = order.serviceOrderband(serviceType, id, action) 嘲弄 when(repository.notifyBandSuspend(any(), any(), a

我试图模拟一个接受3个参数的挂起函数,但当我试图模拟它时,它要求4个参数

  suspend fun notifyBandSuspend(serviceType: String, id: String, action: TimeAction): GenericResponse =
        order.serviceOrderband(serviceType, id, action)
嘲弄

when(repository.notifyBandSuspend(any(), any(), any())).thenReturn(new GenericResponse());
错误-应为4个参数,但找到3个

进口

  // Mockito
    testImplementation "org.mockito:mockito-core:2.28.2"
    androidTestImplementation "org.mockito:mockito-core:2.28.2"
    androidTestImplementation "com.linkedin.dexmaker:dexmaker-mockito:2.28.0"
你知道怎么解决这个问题吗

编辑

因为它在抱怨第四个参数 我像这样传递了4个参数

when(orderRepository.notifyBandSuspend(anyString(), anyString(), any(), any())).thenReturn(new GenericResponse());
这给了我一个错误:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
3 matchers expected, 4 recorded:
错误

谢谢
Rao

也许你有一个重载的方法,它使用了4个参数,这就是mock对象调用的参数。是的,从JVM的角度来看,suspend函数希望最后一个参数是a。如果你从一个协程中调用它,它是隐式传递的。谢谢你的回答,然后我传递了第四个参数,这给了我一个错误。我在(orderRepository.notifyBandSuspend(anyString(),anyString(),any(TimeAction.class)))时更新了问句try,然后返回(new GenericResponse())@DCruz22我试过了,但同样的错误是
预期的4个参数
可能您有一个使用4个参数的方法重载,而这正是模拟对象调用的参数是,从JVM的角度来看,suspend函数预期最后一个参数为a。如果你从一个协程中调用它,它是隐式传递的。谢谢你的回答,然后我传递了第四个参数,这给了我一个错误。我在(orderRepository.notifyBandSuspend(anyString(),anyString(),any(TimeAction.class)))时更新了问句try,然后返回(new GenericResponse())@DCruz22我试过了,但出现了相同的错误
预期有4个参数
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
3 matchers expected, 4 recorded:
-> at com.xxx.xx.test.scenarios.ServiceOrderViewScenario.setup(ServiceOrderViewScenario.java:46)
-> at com.xxx.xx.test.scenarios.ServiceOrderViewScenario.setup(ServiceOrderViewScenario.java:46)
-> at com.xxx.xx.test.scenarios.ServiceOrderViewScenario.setup(ServiceOrderViewScenario.java:46)
-> at com.xxx.xx.test.scenarios.ServiceOrderViewScenario.setup(ServiceOrderViewScenario.java:46)

This exception may occur if matchers are combined with raw values:
//incorrect:
someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
//correct:
someMethod(anyObject(), eq("String by matcher"));

For more info see javadoc for Matchers class.

at com.xxx.xx.clean.orderview.data.OrderRepository.notifyBandSuspend(OrderRepository.kt:22)
at com.xxx.xx.test.scenarios.ServiceOrderViewScenario.setup(ServiceOrderViewScenario.java:46)
at com.xxx.xx.test.BaseTest.scenario(BaseTest.java:79)
at com.xxx.xx.test.ServiceOrderViewTests.testAirStartOrder(ServiceOrderViewTests.java:45)
at java.lang.reflect.Method.invoke(Native Method)
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 androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80)
at androidx.test.internal.runner.junit4.statement.RunAfters.evaluate(RunAfters.java:61)
at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:527)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
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.junit.runners.ParentRunner.run(ParentRunner.java:363)
at androidx.test.runner.AndroidJUnit4.run(AndroidJUnit4.java:104)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
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.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)
at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:388)
at com.xxx.xx.test.runner.UnlockDeviceAndroidJUnitRunner.onStart(UnlockDeviceAndroidJUnitRunner.java:42)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2145)