-3

我有一个 impl 类,它扩展了一个接口 havinf 函数以从数据库中选择条目-

public class EmployeeDAOJDBCTemplateImpl implements EmployeeDAO {

private DataSource dataSource;

public void setDataSource(DataSource dataSource) {
    this.dataSource = dataSource;
}
public List<Employee> getAll() {
    String query = "select id, name, role from Employee";
    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
    List<Employee> empList = new ArrayList<Employee>();

    List<Map<String,Object>> empRows = jdbcTemplate.queryForList(query);

    for(Map<String,Object> empRow : empRows){
        Employee emp = new Employee();
        emp.setId(Integer.parseInt(String.valueOf(empRow.get("id"))));
        emp.setName(String.valueOf(empRow.get("name")));
        emp.setRole(String.valueOf(empRow.get("role")));
        empList.add(emp);
    }
    return empList;
}

}

如何使用 Mockito 框架模拟它?

4

1 回答 1

0

就目前而言,这对于 Mockito 来说也不是一个好的用例,因为您唯一的注入依赖项(DataSource)需要显示为一个完整的支持 SQL 的数据库连接。模拟如此强大而深入的接口是不切实际的,尤其是在传递给另一个协作者(JdbcTemplate)时。

尽管您可以重构来测试 to 的翻译List<Map<String, Object>>List<Employee>但这可能不是一个特别有用的测试,特别是因为它根本不涉及数据库或其架构。

相反,我建议使用H2或其他内存数据库来准备您希望看到的数据,然后检查您的List<Employee>输出是否正确。这样的测试根本不会使用 Mockito,但会以确定性的方式运行您编写的所有代码。

于 2016-08-12T17:20:45.753 回答