首页 > 解决方案 > 我的 @WebMvcTest 测试类如何在 Spring Boot 中使用此 JDBC 身份验证配置进行初始化?

问题描述

我已经将我的 Spring Boot 应用程序配置为使用本地数据库进行身份验证,并且它可以工作(有一个警告,请参见我的另一个问题),但并非我的所有测试类都适用于新配置。

这是配置的相关部分(请在此处查看全部内容):

@Autowired
private DataSource dataSource;

@Override
public void configure(AuthenticationManagerBuilder builder) throws Exception {
    builder .jdbcAuthentication()
            .dataSource(dataSource)
            .withUser(User.withUsername("admin").password(passwordEncoder().encode("pass")).roles("SUPER"));
    logger.debug("Configured app to use JDBC authentication with default database.");
}

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}

@SpringBootTest@AutoConfigureMockMvc工作的测试类(例如,这个)。据我了解,这些会自动配置应用程序的各种 Bean 并将它们一起测试(一种集成测试形式)。

我在用@WebMvcTest(例如这个)装饰的测试类时遇到了麻烦。这些应该只测试一个 Controller 类本身,使用各种 Bean 和其他依赖项的模拟对象。

@MockBean
private DataSource dataSource;

这些测试@WithMockUser在一些地方使用了注解,并且预计不会使用真正的数据库或 JDBC 连接,因为它们每个都只是测试一个控制器。

我的问题:如何在没有测试类失败的情况下将@WebMvcTest 与我当前的安全配置一起使用?我应该在测试类中添加一个方便的 Spring Boot 注释吗?我做错了安全配置吗?

标签: spring-boottestingspring-annotations

解决方案


使测试工作的解决方案是将此属性添加到我的application.yaml

spring:
  datasource: 
    initialization-mode: always

或者,如果您更喜欢使用application.properties配置文件,它看起来像这样:

spring.datasource.initialization-mode=always

我感谢用户Japan Trivedi,他在我的相关问题上指出了这一点。


推荐阅读