【问题标题】:Mockito implementation on queryForObjectqueryForObject 上的 Mockito 实现
【发布时间】:2016-08-12 16:54:00
【问题描述】:

我有一个 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 框架模拟它?

【问题讨论】:

  • StackOverflow 不是代码编写服务;它有助于了解您所做的尝试、您遵循的教程或了解事物如何工作的具体问题。请在提出未来问题时添加有关您的尝试或问题的更多详细信息。

标签: mockito springmockito


【解决方案1】:

就目前而言,这对于 Mockito 来说也不是一个好的用例,因为您唯一注入的依赖项(DataSource)需要显示为 an entire SQL-supporting database connection。模拟这样一个强大而深入的接口是不切实际的,尤其是传递给另一个协作者(JdbcTemplate)时。

虽然您可以重构以测试 List&lt;Map&lt;String, Object&gt;&gt;List&lt;Employee&gt; 的翻译,但这可能不是一个特别有用的测试,特别是因为它根本不涉及数据库或其架构。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    相关资源
    最近更新 更多