c_anirudh
c_anirudh

Reputation: 394

How to mock @injected object in class using Mockito?

I have the following Java code:


Filename: MyClass.java


import javax.inject.Inject;
...

public class MyClass {
  @inject
  private MyDatabaseDao myDatabaseDao;

  public MyResponse process() {
    ...
    String value = myPrivateMethod(x, y, z);
    ...
  }

  private String myPrivateMethod(String x, String y, String z) {
    value = myDatabaseDao.operation(x, y, x); // Line Number 86
    ...
  }  
}

Filename: MyClassTest.java

@ExtendWith(MockitoExtension.class)
public class MyClassTest {
  @InjectMocks
  MyClass myClass;

  @Mock
  MyDatabaseDao myDatabaseDao;

  @Test
  void testProcess() {
    ...

    Mockito.when(myDatabaseDao.operation(any(), any(), any()))
                .thenReturn(someValue);
    ...
    assertEquals(testResponse, myClass.process());    
  }
}

I get a nullPointerException in line number 86 of MyClass.java, i.e., the myDatabaseDao object in that line is null. How can I properly mock and pass that object?

I am using JUnit 5 and Mockito v4.2.0

Upvotes: 0

Views: 1100

Answers (1)

Ken Chan
Ken Chan

Reputation: 90527

I belive it is because you forget to register MockitoExtension. To make @Mock and @InjectMocks to take effect , you have to register it :

@ExtendWith(MockitoExtension.class)
public class MyClassTest {

  @InjectMocks
  MyClass myClass;

  @Mock
  MyDatabaseDao myDatabaseDao;

}

Upvotes: 3

Related Questions