我試圖嘲笑這個道,我得到一個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