第一种情况有效,而第二种情况则返回userDao的NullPointerException。我完全误解了它是如何工作的吗?
这有效
UserDao userDao;
@Before
public void setUp() throws Exception {
userDao = Mockito.mock(UserDao.class);
when(userDao.userExists("TestUser")).thenReturn(true);
}
userDao的NullPointerException
@Mock
private UserDao userDao;
@InjectMocks
private UserService userService;
@Before
public void setUp() throws Exception {
when(userDao.userExists("TestUser")).thenReturn(true); // NPE
}
答案 0 :(得分:2)
您需要将MockitoAnnotations.initMocks(this);
添加到@Before
方法,以创建@Mock
带注释的字段。请参阅here有关此内容的详细信息:
MockitoAnnotations.initMocks(this)方法必须调用初始化带注释的模拟。 在上面的示例中,initMocks()在test的基类的@Before(JUnit4)方法中调用。对于JUnit3,initMocks()可以转到基类的setup()方法。您也可以将initMocks()放入JUnit运行器(@RunWith)或使用内置运行器:MockitoJUnit44Runner,MockitoJUnitRunner