나는이 DAO를 조롱하고 있으며 NPE를 얻고 있습니다. 내가 올바르게 무언가를 조롱하지 않거나 부적절하게 뭔가를 사용하고 있는지 확실하지 않습니다. 나는 아래이 DAO를 가지고 :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) 용 Provider로 코드를 다시 작성하거나 argThat –
@EvgeniyK로 matcher를 작성하십시오. 이 세 가지 옵션 중 하나의 예제를 제공 할 수 있습니까? 왜 메소드의 생성자로 테스트하기가 어렵습니까? – zachandcode