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

时间:2016-01-05 14:25:19

标签: java spring testing mocking mockito

我试图模拟方法的返回值,但我得到了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();

1 个答案:

答案 0 :(得分:2)

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

  

@InjectMocks - 自动将模拟注入测试对象。

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

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

@Mock
private MyService myService;

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