InjectMocks对象的org.mockito.exceptions.misusing.NotAMockException

我试图模拟一个方法的返回值,但我得到NotAMockException

 @InjectMocks private MyService myService; @Mock private OtherServiceUsedInMyServiceAsAutowired otherServiceUsedInMyServiceAsAutowired; 

MyService我有一个名为myMethod()的方法,我希望在调用此方法时返回虚拟对象。

 doReturn(someDummyObject).when(myService).myMethod(any(), any(), any()); 

那时我得到了错误。 我究竟做错了什么? 完整错误:

 org.mockito.exceptions.misusing.NotAMockException: Argument passed to when() is not a mock! Example of correct stubbing: doThrow(new RuntimeException()).when(mock).someMethod(); 

注释@InjectMocks用于将@InjectMocks注入到测试对象中:

@InjectMocks – 自动将@InjectMocks注入测试对象。

这并不意味着对象本身就是一个模拟。 如果要测试对象并希望该对象自动预先初始化模拟实例(通过setter注入),则此注释很有用。

如果要创建MyService的模拟,请使用@Mock

 @Mock private MyService myService; 

这将创建MyService的模拟,您需要为该模拟指定所需的行为。 第一件事是OtherServiceUsedInMyServiceAsAutowired不再有意义: OtherServiceUsedInMyServiceAsAutowired对象不依赖于该类。