如何在@SpringBootTest之前添加设置并仅运行一次?

时间:2018-12-07 19:00:15

标签: 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超级类,每个测试类将构造一个容器并在完成后将其删除。因此,maven需要花费大量时间来管理docker。 (创建和删除)

我的问题是whether there's better way to deal with it

我可能想要实现的理想情况是,此容器的创建和删除操作仅在@SpringBootTest启动之前运行一次,它将与所有测试类共享。同时,这也不会阻止其他开发人员在某些特殊情况下创建新容器。

我有一个不完整的主意:

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

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

1 个答案:

答案 0 :(得分:1)

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