我有测试代码,我想从consul读取配置。application.properties(src/main/resources)启用consul配置。我有一个 POJO 类名 DBConfig (在 src/main/java 中),它从 consul 获取配置。我已经在测试类中 Autowiring 了 DBConfig,当我运行单元测试时,它给了我 nullpointerException,因为它没有从 consul 获取值。 如何处理这种情况。请帮忙。
@Configuration
@ConfigurationProperties(prefix="db")
@RefreshScope
public class DBConfig {
private String jdbcURL;
private String username;
private String password;
private String driverClass;
...getter setters.
}
测试类---
@RunWith(MockitoJUnitRunner.class)
@Transactional(propagation=Propagation.REQUIRED,readOnly=false,rollbackFor=Exception.class)
@SpringBootTest(classes={DBConfig.class})
public class TestUserDao extends DBTestCase {
@Autowired
private DBConfig dbConfig;
protected final Resource res = new ClassPathResource("actualDataSet.xml");
@Bean
@Profile("test")
@RefreshScope
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(dbConfig.getDriverClass());
dataSource.setUrl(dbConfig.getJdbcURL());
dataSource.setUsername(dbConfig.getUsername());
dataSource.setPassword(dbConfig.getPassword());
return dataSource;
}
@Bean
@Autowired
public NamedParameterJdbcTemplate jdbcTemplate(DataSource dataSource) {
return new NamedParameterJdbcTemplate(dataSource);
}
@Bean
@Autowired
public UserDAO userDAO(NamedParameterJdbcTemplate jdbcTemplate) {
return new UserDAO(jdbcTemplate);
}
@Override
protected IDataSet getDataSet() throws Exception {
ClassLoader classLoader = getClass().getClassLoader();
String file = classLoader.getResource("actualDataSet.xml").getFile();
return new FlatXmlDataSetBuilder().build(new FileInputStream(file));
}
protected DatabaseOperation getSetUpOperation() throws Exception {
return DatabaseOperation.REFRESH;
}
@Test
public void insertTodo() throws Exception {
}
protected DatabaseOperation getTearDownOperation() throws Exception {
return DatabaseOperation.DELETE;
}
最佳答案
这可能是由于使用 MockitoJUnitRunner
类引起的,该类在启动时不会加载 ApplicationContext
,这意味着您的 Bean 将无法访问。
一旦您在 @RunWith()
注解中使用 SpringRunner
类,Spring 就应该能够注入(inject) DBConfig
bean。
关于javascript - 测试类无法读取consul配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59089865/