javascript - 测试类无法读取consul配置

标签 javascript java spring spring-boot spring-mvc

我有测试代码,我想从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/

相关文章:

javascript - mysql2返回值困惑

javascript - 将 Promise 包装在 try/catch block 中是正确的方法吗?

java - Hive:如何计算时差

java - 使用 Spring 的密码加密/解密

javascript - CSS Transition 在表 colgroup 中不起作用

javascript - 无法使用 jquery .on() 修改元素的属性

java - JFace CTabFolder,在选项卡之间切换

java - 如何从命令提示符编译 Servlet?

spring - 使用 Spring Integration Mail 连接到 Microsoft Exchange Server

java - Spring Swing 集成