私はこの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 ;
}
をそして、これはそれは私が何をしないか、正しくからかっていないですList<Person> resultList = personDaoImpl.getAllPerson();
にNPEをスロー
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());
}
私のJUnitのでしょうか?どんな助けもありがたいです
メソッドにコンストラクタがある場合、テストでコードをカバーするのは非常に難しいでしょう。 PersonRowMapperまたはモックコンストラクタ(PowerMock)用のプロバイダでコードを書き直すか、argThat –
@EvgeniyKでmatcherを書き込むという選択肢がいくつかあります。これらの3つのオプションの例を挙げることができますか?なぜメソッドのコンストラクタでテストするのが難しいのですか? – zachandcode