Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 在Spring Boot应用程序中测试JdbcTemplate_Spring Boot_Junit_Mockito - Fatal编程技术网

Spring boot 在Spring Boot应用程序中测试JdbcTemplate

Spring boot 在Spring Boot应用程序中测试JdbcTemplate,spring-boot,junit,mockito,Spring Boot,Junit,Mockito,我有下面的代码 @Repository public class ServiceImpl implements MyService { @Autowired private ConnectionFactory factory; private List<Map<String, Object>> execute(String source, String schemaName, String query) { return getJdbcTemplat

我有下面的代码

@Repository
public class ServiceImpl implements MyService {
  @Autowired
  private ConnectionFactory factory;

  private List<Map<String, Object>> execute(String source, String schemaName, String query) {
    return getJdbcTemplate(source, schemaName).queryForList(query);
  }

  private JdbcTemplate getJdbcTemplate(String source, String schemaName) {
    return new JdbcTemplate(factory.getDataSource(source, schemaName));
  }
  @Override
  public List<Map<String, Object>> findAll(String source, String schemaName) {
    String query = "query";
    return execute(source, schemaName, query);
  }
}

您正在模拟JdbcTemplate并在模拟实例上设置期望值,而您的服务根本不使用此模拟并创建一个新实例

private JdbcTemplate getJdbcTemplate(String source, String schemaName) {
    return new JdbcTemplate(factory.getDataSource(source, schemaName));
}
不要在您的服务中创建新的JdbcTemplate。注入JDBCTemplatebean是完全合法的:

org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection: DataSource returned null from getConnection(): dataSource
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:84)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:371)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:452)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:462)
    at org.springframework.jdbc.core.JdbcTemplate.queryForList(JdbcTemplate.java:490)
private JdbcTemplate getJdbcTemplate(String source, String schemaName) {
    return new JdbcTemplate(factory.getDataSource(source, schemaName));
}