我正在努力向使用 Spring 和 Jersey 的现有 Java Web 应用程序添加集成测试。我们的许多其他服务都打包为 WAR,但这是打包为具有所有依赖项的 JAR。在上述其他服务中,我们使用 Cargo 在 Maven 的预集成测试阶段启动它们,并在集成后测试阶段停止它们。
所以问题是启动服务器来进行我们的集成测试。我们可以使用 exec 插件来启动服务,但由于它永远不会退出,因此不会运行集成测试。我们还可以扩展 JerseyTest,它会成功启动服务器,但是每次测试都会启动和停止它,这会占用大量时间。
那么我有什么方法可以将 JerseyTest 配置为仅启动一次服务吗?或者有没有办法让我启动和停止 JAR,而无需求助于平台相关的脚本?
您可以重写
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)
注释您的测试类,以便能够使您的方法成为非静态的。