我试图 mock 这个 dao,但我得到了 NPE。我不确定我是否没有正确地 mock 某些东西或者我使用了不恰当的东西。我有下面这个 dao:
@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
我错过了什么或没有正确 mock 什么?任何帮助将不胜感激
最佳答案
不应该是 Matchers.<PersonRowMapper>
?
when(namedParameterJdbcTemplate.query(anyString(), Matchers.<PersonRowMapper> any())).thenReturn(anyList());
关于java - 如何模拟 RowMapper?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39583893/