[java] Difference between @Mock and @InjectMocks

What is the difference between @Mock and @InjectMocks in Mockito framework?

This question is related to java unit-testing mocking mockito

The answer is


@Mock creates a mock. @InjectMocks creates an instance of the class and injects the mocks that are created with the @Mock (or @Spy) annotations into this instance.

Note you must use @RunWith(MockitoJUnitRunner.class) or Mockito.initMocks(this) to initialize these mocks and inject them (JUnit 4).

With JUnit 5, you must use @ExtendWith(MockitoExtension.class).

@RunWith(MockitoJUnitRunner.class) // JUnit 4
// @ExtendWith(MockitoExtension.class) for JUnit 5
public class SomeManagerTest {

    @InjectMocks
    private SomeManager someManager;

    @Mock
    private SomeDependency someDependency; // this will be injected into someManager
 
     // tests...

}

Similar questions with java tag:

Similar questions with unit-testing tag:

Similar questions with mocking tag:

Similar questions with mockito tag: