org.mockito.exceptions.misusing.UnfinishedStubbingException: Unfinished stubbing detected here: -> at com.zte.ums.cnms.pm.datfileupload.ranomm.clean.CleanTaskPollServiceTest.testInit(CleanTaskPollServiceTest.java:66) E.g. thenReturn() may be missing. Examples of correct stubbing: when(mock.isOk()).thenReturn(true); when(mock.isOk()).thenThrow(exception); doThrow(exception).when(mock).someVoidMethod();
时间: 2024-03-28 09:39:02 浏览: 355
这是一个Mockito框架的异常,通常是因为在测试中使用了Mockito的stubbing功能,但是stubbing没有完成或者没有正确完成。这个异常的信息会告诉你在哪个地方出错了,比如在这个例子中是在CleanTaskPollServiceTest的testInit方法的第66行。
要解决这个问题,你需要检查测试代码中的Mockito stubbing部分,看看是否有stubbing没有完成或者没有正确完成。你可以使用正确的stubbing语法,比如使用thenReturn()来返回一个值,或者使用thenThrow()来抛出一个异常。如果是void方法,则可以使用doThrow()方法来抛出异常。确保每个stubbing都被正确地完成。
相关问题
org.mockito.exceptions.misusing.UnfinishedStubbingException:
org.mockito.exceptions.misusing.UnfinishedStubbingException是一个Mockito库在单元测试中抛出的异常。当你在试图完成对Mock对象的模拟(stubbing)操作时,如果没有正确地结束模拟,就会触发这个异常。Mockito是一种用于编写测试的工具,它允许你在测试中模拟对象的行为。如果你试图对一个mock对象添加新的期望(expectations)或行为(when),但在添加完所有预期行为之前就尝试验证或完成模拟,UnfinishedStubbingException就会抛出,提示你需要确保所有的mock方法都被适当地设置了返回值或者行为。
例如,下面的代码可能导致此异常:
```java
// 错误示例
List mockedList = mock(List.class);
mockedList.add("item"); // 没有设置mock对象add方法的返回值或行为
// 测试代码尝试验证add方法
assertEquals(0, mockedList.size()); // 这里会抛出异常,因为add方法未完成模拟
```
正确的做法应该是为每个预期的调用提供明确的处理,如设置返回值或者行为链:
```java
// 正确示例
List mockedList = mock(List.class);
when(mockedList.add("item")).thenReturn(1); // 完成模拟 add 方法的调用
assertEquals(1, mockedList.size());
```
org.mockito.exceptions.misusing.NotAMockException: Argument passed to when() is not a mock! Example of correct stubbing: doThrow(new RuntimeException()).when(mock).someMethod(); at com.zte.ums.cnms.pm.datfileupload.ranomm.clean.CleanTaskPollServiceTest.testInit(CleanTaskPollServiceTest.java:60) 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.internal.runners.TestMethod.invoke(TestMethod.java:66) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:316) at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:86) at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:94) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest
根据您提供的异常信息,可以看出问题出现在 `when()` 方法上。异常信息提示 Argument passed to when() is not a mock!,意思是当 `when()` 方法传入的参数不是 Mock 对象时,就会出现这个异常。
建议您检查一下代码中的 `when()` 方法中传入的参数,确保该参数是一个 Mock 对象。如果该参数不是 Mock 对象,您需要将其替换为 Mock 对象,或者使用其他方法进行 Stubbing。
阅读全文