我有一个jar,它将包含在spring boot应用程序中,我正在尝试进行集成测试,该项目具有用于创建数据源和JDBC模板的配置类,我正在使用测试,
当另一个项目中包含的这个jar可以很好地获取数据但不在同一个项目中时,此项目中没有应用程序类
spring-boot-starter-test被添加为依赖项
配置
@Configuration
public class DatabaseAccesManagementConfig {
@Bean(name = "accessmngmtDataSource")
@Qualifier("accessmngmtDataSource")
@ConfigurationProperties(prefix = "accessmngmt.datasource")
public DataSource accessmngmtDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "accessmngmtJdbcTemplate")
@Qualifier("accessmngmtJdbcTemplate")
public JdbcTemplate accessmngmtJdbcTemplate(@Qualifier("accessmngmtDataSource") DataSource accessmngmtDataSource) {
return new JdbcTemplate(accessmngmtDataSource);
}
}
道课
@Repository
public class ResourcePrivilegesDao {
static final Logger log = LoggerFactory.getLogger(ResourcePrivilegesDao.class);
@Autowired
@Qualifier("accessmngmtJdbcTemplate")
private JdbcTemplate jdbcTemplate;
public List<RP> getAll() {
log.debug("entering getAll()");
String sql = "SELECT * FROM rp";
RowMapper<RP> rowMapper = new RPRowMapper();
List<RP> result = this.jdbcTemplate.query(sql, rowMapper);
return result;
}
}
测试类
@SpringBootTest
@TestPropertySource(locations="classpath:application-test.properties")
@ContextConfiguration(classes = DatabaseAccesManagementConfig.class)
public class ResourcePrivilegesDaoTest {
@Autowired
DatabaseAccesManagementConfig databaseAccesManagement;
@Autowired
ResourcePrivilegesDao dao;
@Test
public void testGetAll() {
System.out.println(databaseAccesManagement);
List<ResourcePrivileges> list = dao.getAll();
Assert.notNull(list, "No resource privileges found");
Assert.notEmpty(list);
}
}
内部的测试属性
environment=test
#Access management db details
accessmngmt.database.url=//xxyyy/am
accessmngmt.database.username=user
accessmngmt.database.password=password
答案 0 :(得分:1)
在测试类中,您错过了@RunWith(SpringRunner.class)
,后者配置了需要Spring DI的单元测试。
看看文档spring unit test
为了使单元测试运行批处理作业,框架必须加载作业的ApplicationContext。使用两个注释来触发此操作:
@RunWith(SpringJUnit4ClassRunner.class):指示该类应使用Spring的JUnit工具
@ContextConfiguration(locations = {...}):指示哪些XML文件包含ApplicationContext。
注意,SpringRunner是SpringJUnit4ClassRunner的别名。因此,我们可以使用@RunWith(SpringRunner.class)
代替名称较短的@RunWith(SpringJUnit4ClassRunner.class)
。
已更新:
对于数据源属性注入,应该在Test类上注释@EnableConfigurationProperties
批注。
此外,您在accessmngmt.datasource
类中使用DatabaseAccesManagementConfig
,而前缀在accessmngmt.database
中与application-test.properties
不匹配。在这里,您必须统一它们,以便可以将属性注入Bean。