我试图模拟方法的返回值,但我得到了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();
答案 0 :(得分:2)
注释@InjectMocks
用于将模拟注入到测试对象中:
@InjectMocks
- 自动将模拟注入测试对象。
这并不意味着对象本身就是模拟。如果要测试对象并希望该对象自动预先初始化模拟实例(通过setter注入),则此注释很有用。
如果您要创建MyService
的模拟,请使用@Mock
:
@Mock
private MyService myService;
这将创建MyService
的模拟,您需要为该模拟指定所需的行为。第一件事是OtherServiceUsedInMyServiceAsAutowired
不再有意义了:被模拟的对象不会依赖于那个类。