我试着嘲笑这个道然后我得到了一个NPE。我不确定我是不是没有正确地模仿一些东西,或者我使用了一些不恰当的东西。我有下面这条道:
@Repository
public class PersonDaoImpl extends AbstractDao implements PersonDao {
private static final String SQL = "select * from personTable";
@Override
public List<Person> getAllPerson() {
PersonRowMapper personRowMapper = new PersonRowMapper ();
List<Person> personList = getNamedParameterJdbcTemplate().query(SQL, personRowMapper);
return personList ;
}这是我的junit
public class PersonDaoImplTest {
@Mock
protected NamedParameterJdbcTemplate namedParameterJdbcTemplate;
@Mock
protected PersonRowMapper personRowMapper;
@InjectMocks
private PersonDaoImpl personDaoImpl;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void shouldReturnPerson() {
when(namedParameterJdbcTemplate.query(anyString(), Matchers.<RowMapper<PersonRowMapper>> any())).thenReturn(anyList());
List<Person> resultList = personDaoImpl.getAllPerson();
assertTrue(!resultList.isEmpty());
}它在List<Person> resultList = personDaoImpl.getAllPerson();上抛出NPE
我遗漏了什么或者没有正确地模仿?任何帮助都将不胜感激
发布于 2016-09-20 08:29:36
难道不应该是Matchers.<PersonRowMapper>吗?
when(namedParameterJdbcTemplate.query(anyString(), Matchers.<PersonRowMapper> any())).thenReturn(anyList());发布于 2016-09-20 11:31:12
第一个解决方案(包含提供商).Recomended
public class PersonDaoImpl extends AbstractDao implements PersonDao {
private static final String SQL = "select * from personTable";
com.google.inject.Provider<PersonRowMapper> provider;
@Inject
public PersonDaoImpl(Provider<PersonRowMapper> provider){
this.provider = provider;
}
@Override
public List<Person> getAllPerson() {
PersonRowMapper personRowMapper = provider.get();
List<Person> personList = getNamedParameterJdbcTemplate().query(SQL);
return personList ;
}在测试中
public class PersonDaoImplTest {
@Mock
com.google.inject.Provider<PersonRowMapper> provider;
......
@Test
public void shouldReturnPerson() {
when(provider.get()).thenReturn(personRowMapper);
}
}第二种解决方案。
我很懒得再写一遍如何模拟构造函数,看看我在这个主题PowerMockito.doReturn returns null (或者在web上搜索)上的答案,你就会很容易理解为什么很难模拟它并在单元测试下覆盖你的代码。单元测试专家不推荐使用模拟构造函数。
https://stackoverflow.com/questions/39583893
复制相似问题