@Mock,空指针异常 [英] @Mock, NullPointerException

查看:1119
本文介绍了@Mock,空指针异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

第一种情况有效,而第二种情况为 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

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

这篇关于@Mock,空指针异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆