Reputation: 2527
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
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