问题描述
第一种情况有效,而第二种情况为 userDao 返回 NullPointerException.我完全误解了这是如何工作的吗?
The first case works, while the second returns a NullPointerException for userDao. Did I totally misunderstand how this works?
这有效
UserDao userDao;
@Before
public void setUp() throws Exception {
userDao = Mockito.mock(UserDao.class);
when(userDao.userExists("TestUser")).thenReturn(true);
}
userDao 的 NullPointerException
NullPointerException for userDao
@Mock
private UserDao userDao;
@InjectMocks
private UserService userService;
@Before
public void setUp() throws Exception {
when(userDao.userExists("TestUser")).thenReturn(true); // NPE
}
推荐答案
您需要在 @Before
方法中添加 MockitoAnnotations.initMocks(this);
来创建@Mock
注释字段.请参阅此处有关此内容的详细信息:
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) 方法必须调用以初始化带注释的模拟.在上面的例子中,initMocks() 在测试基类的@Before (JUnit4) 方法中被调用.对于 JUnit3 initMocks() 可以转到基类的 setup() 方法.您还可以将 initMocks() 放在您的 JUnit 运行程序 (@RunWith) 中或使用内置运行程序:MockitoJUnit44Runner、MockitoJUnitRunner
这篇关于@Mock,空指针异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!