如何在球衣应用程序上运行集成测试,而无需每次测试都重新启动服务器?

问题描述 投票:0回答:1

我正在努力向使用 Spring 和 Jersey 的现有 Java Web 应用程序添加集成测试。我们的许多其他服务都打包为 WAR,但这是打包为具有所有依赖项的 JAR。在上述其他服务中,我们使用 Cargo 在 Maven 的预集成测试阶段启动它们,并在集成后测试阶段停止它们。

所以问题是启动服务器来进行我们的集成测试。我们可以使用 exec 插件来启动服务,但由于它永远不会退出,因此不会运行集成测试。我们还可以扩展 JerseyTest,它会成功启动服务器,但是每次测试都会启动和停止它,这会占用大量时间。

那么我有什么方法可以将 JerseyTest 配置为仅启动一次服务吗?或者有没有办法让我启动和停止 JAR,而无需求助于平台相关的脚本?

java spring maven jersey integration-testing
1个回答
0
投票

您可以重写

setUp()
类的
tearDown()
JerseyTest
方法,如下所示:

@TestInstance(Lifecycle.PER_CLASS)
public class MyAppTest extends JerseyTest {
    
    @Override
    public void setUp() throws Exception {
        super.setUp();
    }

    @Override
    public void tearDown() throws Exception {
        super.tearDown();
    }

    @BeforeAll
    void setupServer() {
        try {
            setUp();
        } catch (Exception e) {
            System.out.println("A fatal exception happened while setting up the Test Container.");
        }
    }

    @AfterAll
    void shutdownServer() {
        try {
            tearDown();
        } catch (Exception e) {
            System.out.println("A fatal exception happened while shutting down the Test Container.");
        }
    }
}

这将覆盖

@BeforeEach
类中最初存在的
@AfterEach
JerseyTest
注释。然后,使用
setUp()
l 和
tearDown()
注释在测试之前/之后手动调用
@BeforeAl
@AfterAll

请注意,您需要使用

@TestInstance(Lifecycle.PER_CLASS)
注释您的测试类,以便能够使您的方法成为非静态的。

© www.soinside.com 2019 - 2024. All rights reserved.