我试图嘲笑这个道,我得到一个NPE。我不确定我是不是正确地嘲笑某些东西,或者我正在使用不适当的东西。我有低于此道:如何模拟RowMapper?
@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我缺少或没有正确嘲讽?任何帮助,将不胜感激
如果您在方法中使用构造函数,那么使用测试覆盖代码将非常困难。 你有几种选择:用PersonRowMapper提供者或者模拟构造函数(PowerMock)重写代码,或者用argThat –
@EvgeniyK编写匹配器。你能举出这三个选项中的任何一个吗?为什么很难用方法中的构造函数进行测试? – zachandcode