org.mockito.exceptions.misusing.NotAMockException 在 InjectMocks 对象上

org.mockito.exceptions.misusing.NotAMockException on InjectMocks object

我试图从方法中模拟 return 值,但我得到 NotAMockException

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

MyService 中,我有一个名为 myMethod() 的方法,我想在调用此方法时 return 虚拟对象。

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 - injects mocks into tested object automatically.

这并不意味着对象将是一个 mock 本身。如果您想测试一个对象并希望该对象自动具有 pre-initialized 个模拟实例(通过 setter 注入),此注释很有用。

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

@Mock
private MyService myService;

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