java - 我如何模拟 ApplicationRunner bean,以便 ApplicationContext 加载这个模拟的 ApplicationRunner Bean

标签 java spring spring-boot integration-testing

我有一个 ApplicationRunner bean,它执行一些飞路迁移。

@Bean
ApplicationRunner flywayRunner(){
    return new ApplicationRunner() {
        @Override
        public void run(ApplicationArguments args) throws Exception {
            Flyway flyway = Flyway.configure().dataSource("jdbc:postgresql://localhost:5432/dbname").load(); 
            flyway.migrate();
        }
    };
}

我还没有编写任何测试用例,但一些已经存在的集成测试用例由于无法使用 bean ApplicationRunner 加载 ApplicationContext 而失败。

我是 spring 的新手,所以不确定如何使现有的测试用例通过。

最佳答案

在集成测试类中使用@SpringBootTest注释为您的测试用例创建或启动应用程序上下文。对于覆盖从传入请求到数据库的整个Spring Boot应用程序的测试,或测试覆盖应用程序中难以手动设置的某些部分,我们可以而且应该使用@SpringBootTest。我们可以使用 @AutoConfigureMockMvc 这样的注释来自定义加载到应用程序上下文中的配置和模拟 bean。您甚至可以提供自己的自定义主应用程序类来运行集成测试用例,并使用它来加载您自己的测试配置:

@SpringBootTest(classes = CustomApplication.class)
class CustomApplicationTest {

}

如果您只想添加一个 Bean,您还可以使用 @Import 注释来导入所需的 Bean。

关于java - 我如何模拟 ApplicationRunner bean,以便 ApplicationContext 加载这个模拟的 ApplicationRunner Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62442868/

相关文章:

java - 如何确保强制参数传递到 Spring MVC Controller 方法中?

在小程序中使用 java.awt.Robot 类进行屏幕捕获时出现 java.security.AccessControlException

java - 将数组添加到 ArrayList

java - 修改多个 Map 时避免 ConcurrentModificationException

java - 如何在我的 Spring MVC Web 应用程序中为大多数请求运行通用代码?

java - 嵌套异常: java. lang.NoClassDefFoundError:org/springframework/context/annotation/AnnotationConfigApplicationContext

java - 使用两个 yaml 文件作为配置属性

spring-boot - 带有 CookieLocaleResolver 的 Spring Boot 应用程序中的错误页面

java - 枚举中的内部类在 Java 中总是静态的吗?

java - JHipster Spring boot : org. hibernate.HibernateException:无法访问 lob 流