gpt4 book ai didi

java - 为什么bean没有注入(inject)到测试类中

转载 作者:行者123 更新时间:2023-11-29 04:13:45 26 4
gpt4 key购买 nike

我有一个jar,它将包含在spring boot应用程序中,我正在尝试在其中进行集成测试,该项目具有用于创建数据源和JDBC模板的配置类,我正在使用测试,

当此 jar 包含在另一个项目中时,该项目可以很好地获取数据,但不在同一项目中,则该项目中没有应用程序类

spring-boot-starter-test is added as a dependency

配置

@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

最佳答案

在测试类中,您错过了 @RunWith(SpringRunner.class),它配置了需要 Spring DI 的单元测试。

查看文档 spring unit test

In order for the unit test to run a batch job, the framework must load the job's ApplicationContext. Two annotations are used to trigger this:

@RunWith(SpringJUnit4ClassRunner.class): Indicates that the class should use Spring's JUnit facilities

@ContextConfiguration(locations = {...}): Indicates which XML files contain the ApplicationContext.

注意,SpringRunner 是 SpringJUnit4ClassRunner 的别名。因此我们可以使用 @RunWith(SpringRunner.class) 而不是名称更短的 @RunWith(SpringJUnit4ClassRunner.class)

更新:

对于数据源属性注入(inject),@EnableConfigurationProperties 注释应注释在Test类上。

此外,您在DatabaseAccesManagementConfig类中使用accessmngmt.datasource,而前缀与application-中的accessmngmt.database不匹配测试.属性。这里你必须统一它们,这样你就可以将属性注入(inject)到bean中。

关于java - 为什么bean没有注入(inject)到测试类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53576994/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com