我需要 Spring 引导 Web 应用程序在 JUnit 中重新启动

I need my Spring Boot WebApplication to restart in JUnit

不深入细节,我在 运行 我的 Junit 一次测试时遇到了问题。如果我 运行 他们 class 通过 class,一切都很棒!否则我会遇到麻烦,因为我无法在 junit-test-class 之间重新启动我的 WebApplication。这导致我在我的 WebApplication 中有 Zookeeper 服务器客户端,在我在 classes 之间完成 Zookeeper 服务器的关闭和启动后,它们会徘徊。这些 Zookeeper 服务器客户端可能需要一段时间才能与服务器重新同步,这会导致不可预测的行为...

有没有办法通过在 JUnit 测试的 @BeforeClass 和 @AfterClass 方法中调用某些东西来让我的 SpringBootServletInitializer class 重新启动?

WebApplication.java

@ComponentScan
@EnableAutoConfiguration
@EnableWebMvc
@EnableHyperMediaSupport(...)
@PropertySources(...)
public class WebApplication extends SpringBootServletInitializer
{
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder)
    {
        return builder.sources(WebApplication.class);
    }

    @Override
    protected WebApplicationContext run(SpringApplication application)
    {
        application.getSources().remove(ErrorPageFilter.class);
        return (WebApplicationContext) application.run();
    }

    public static void main(String[] args)
    {
        SpringApplication.run(WebApplication.class, args);
    }
}

您可以使用 @DirtiesContext 注释。

这将提示 Spring 测试运行器重新加载测试方法之间的上下文。