java - 如何在@SpringBootTest 之前添加设置并且只运行一次?

标签 java spring-boot junit spring-boot-test docker-java

我有一个docker DB设置方法,目前位于@BeforeAll。 目前,构造如下

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public DockerConstructorTest{
  @BeforeAll
  public static void setup(){
    ...
    CreateContainer
    ...
  }

  @AfterAll
  public static void done(){
    ...
    Stop & Remove Container
    ...
  }
}

有多个测试类都扩展了这个Test父类(super class),每个测试类都会构造一个容器,完成后将其移除。所以maven耗费了大量的时间来管理docker。 (创建和删除)

我的问题是是否有更好的方法来处理它

我可能想要实现的理想情况是,这个容器的创建和删除只运行一次,就像@SpringBootTest 启动之前一样,它将与所有测试类共享。同时,它也不会阻止其他开发者为一些角落场景创建新的容器。

我有一些不完整的想法:

  1. 在 SpringBoot 主类中添加 Constructor 触发器,如果​​它已启动 通过测试,运行 Docker 容器构造函数。但这也意味着我 在Main Class中添加一些测试相关的代码,使它们相互耦合。 个人讨厌这种情况发生
  2. 重写 SpringBootTest。覆盖让我烦恼我是否应该这样做。

请分享您的绝妙想法,如果可以,我将不胜感激 将解决此问题或部分问题。

最佳答案

如果使用 JUnit 5,请参阅以下答案(可能使用自定义扩展,JUnit 团队稍后将提供一流的支持)

关于java - 如何在@SpringBootTest 之前添加设置并且只运行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53675402/

相关文章:

java - Spark Dataset<Row> vector 列到数组类型转换

java - 使用 jackson-dataformat-xml 库将 XML 中的空标记转换为 java 属性

java - 我想用另一个字符替换字符串 arraylist 的每个元素的第四个字符

java - 餐饮哲学家实现

java - Spring Boot 验证与 ControllerAdvice 的行为不具有确定性

java - junit.framework.AssertionFailedError 并且由于空格而没有可运行的方法

java - 如何模拟方法内的对象方法调用?

java - 从 junit 中拦截 http 调用的最简单方法是什么?

java - 安卓AVD “Unfortunately, <app> has stopped.”

java - 使用 Tanuki Service Wrapper 包装 Spring Boot 应用程序