java - 如何模拟 RowMapper?

标签 java unit-testing junit

我试图 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/

相关文章:

java - 单元测试,我应该修改方法参数吗

java - Gradle 只运行一个测试套件

Junit Test (Mockito, PowerMock) 一个带有void方法和私有(private)值的类

java - 在 Spring Boot 应用程序中配置 GCP 凭据的首选方法是什么

java - 缺少返回类型编译错误

java - 根据用户输入显示数字的出现...数组,java

sql - 是否可以在 SQL 中实现测试驱动开发?

java - 在 Spring 上重新注册单例 bean

java - 使用netbeans在java中更改密码程序

c# - TFS,测试和放置测试文件(where)