Mockito: Inject real objects into private @Autowired fields

java, mockito, spring

Solution

Use `@Spy` annotation

@RunWith(MockitoJUnitRunner.class)
public class DemoTest {
    @Spy
    private SomeService service = new RealServiceImpl();

    @InjectMocks
    private Demo demo;

    /* ... */
}

Mockito will consider all fields having `@Mock` or `@Spy` annotation as potential candidates to be injected into the instance annotated with `@InjectMocks` annotation. In the above case `'RealServiceImpl'` instance will get injected into the 'demo'

For more details refer

Mockito-home

@Spy

@Mock

Problem

I'm using Mockito's `@Mock` and `@InjectMocks` annotations to inject dependencies into private fields which are annotated with Spring's `@Autowired`: ``` @RunWith(MockitoJUnitRunner.class) public class DemoTest { @Mock private SomeService service; @InjectMocks private Demo demo; /* ... */ } ``` and ``` public class Demo { @Autowired private SomeService service; /* ... */ } ``` Now I would like to also inject real objects into private `@Autowired` fields (without setters). Is this possible or is the mechanism limited to injecting Mocks only?

Original source