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));
}