abc32112
abc32112

Reputation: 2527

@Mock, NullPointerException

The first case works, while the second returns a NullPointerException for userDao. Did I totally misunderstand how this works?

This works

UserDao userDao;

@Before
public void setUp() throws Exception {
    userDao = Mockito.mock(UserDao.class);
    when(userDao.userExists("TestUser")).thenReturn(true);
}

NullPointerException for userDao

@Mock
private UserDao userDao;

@InjectMocks
private UserService userService;

@Before
public void setUp() throws Exception {
    when(userDao.userExists("TestUser")).thenReturn(true); // NPE
}

Upvotes: 1

Views: 2272

Answers (1)

Andrei Stefan
Andrei Stefan

Reputation: 52366

You need to add MockitoAnnotations.initMocks(this); to the @Before method to create the @Mock annotated fields. See here details about this:

MockitoAnnotations.initMocks(this) method has to called to initialize annotated mocks. In above example, initMocks() is called in @Before (JUnit4) method of test's base class. For JUnit3 initMocks() can go to setup() method of a base class. You can also put initMocks() in your JUnit runner (@RunWith) or use built-in runners: MockitoJUnit44Runner, MockitoJUnitRunner

Upvotes: 2

Related Questions