Java集成测试可重用基础设置

Java集成测试可重用基础设置,java,integration-testing,Java,Integration Testing,在我的应用程序中,我有两个集成测试,它们都执行以下操作: 设置应用程序上下文 创建测试数据库 用数据填充测试数据库 每次集成测试都需要时间来完成这三个初始步骤。我希望它们成为所有集成测试的基础。 有没有人有这方面的经验,可以用文章、工具、线程等为我指出正确的方向 谢谢你的帮助 /Richard你应该使用Junit5 正如文档所述,@BeforeAll用于表示在当前测试类中的所有测试之前应该执行带注释的方法 所以,通过这种方法,所有的数据库设置都可以为类执行一次,而不是为每个方法执行一次 您应

在我的应用程序中,我有两个集成测试,它们都执行以下操作:

  • 设置应用程序上下文
  • 创建测试数据库
  • 用数据填充测试数据库
每次集成测试都需要时间来完成这三个初始步骤。我希望它们成为所有集成测试的基础。 有没有人有这方面的经验,可以用文章、工具、线程等为我指出正确的方向

谢谢你的帮助

/Richard你应该使用Junit5

正如文档所述,@BeforeAll用于表示在当前测试类中的所有测试之前应该执行带注释的方法

所以,通过这种方法,所有的数据库设置都可以为类执行一次,而不是为每个方法执行一次

您应该使用Junit5

正如文档所述,@BeforeAll用于表示在当前测试类中的所有测试之前应该执行带注释的方法


所以,通过这种方法,所有的数据库设置都可以为类执行一次,而不是为每个方法执行一次

这里的一个选项是使用
@BeforeClass
方法创建一个基类,以便在需要重用它时,只需通过测试类扩展它即可

另一个选择是使用。它为您提供了在不同事件上连接代码的可能性,例如测试开始、测试完成等:

class TestListener extends RunListener {
    @Override
    public void testRunStarted(Description description) throws Exception {
        // Called before any test has started
    }

    @Override
    public void testRunFinished(Result result) throws Exception {
        // Called when all tests have finished
    }

    @Override
    public void testStarted(Description description) throws Exception {
    }

    @Override
    public void testFinished(Description description) throws Exception {
    }

    @Override
    public void testFailure(Failure failure) throws Exception {
    }

    @Override
    public void testAssumptionFailure(Failure failure) {
    }

    @Override
    public void testIgnored(Description description) throws Exception {
    }
}
通过在插件配置中添加以下代码,您甚至可以使用Maven的surefire(单元测试)插件或故障保护插件(集成测试):

<properties>
  <property>
    <name>listener</name>
    <value>com.your.awersome.TestListener</value>
  </property>
</properties>

听众
com.your.awersome.TestListener

如果您只需要为一个项目执行此操作,此解决方案更灵活,但与第一个选项相比不太明显。

这里的一个选项是使用
@BeforeClass
方法创建一个基类,因此只要您需要重用它,就可以通过测试类对其进行扩展

另一个选择是使用。它为您提供了在不同事件上连接代码的可能性,例如测试开始、测试完成等:

class TestListener extends RunListener {
    @Override
    public void testRunStarted(Description description) throws Exception {
        // Called before any test has started
    }

    @Override
    public void testRunFinished(Result result) throws Exception {
        // Called when all tests have finished
    }

    @Override
    public void testStarted(Description description) throws Exception {
    }

    @Override
    public void testFinished(Description description) throws Exception {
    }

    @Override
    public void testFailure(Failure failure) throws Exception {
    }

    @Override
    public void testAssumptionFailure(Failure failure) {
    }

    @Override
    public void testIgnored(Description description) throws Exception {
    }
}
通过在插件配置中添加以下代码,您甚至可以使用Maven的surefire(单元测试)插件或故障保护插件(集成测试):

<properties>
  <property>
    <name>listener</name>
    <value>com.your.awersome.TestListener</value>
  </property>
</properties>

听众
com.your.awersome.TestListener

如果您只需要为一个项目使用此解决方案,则此解决方案更灵活,但与第一个选项相比,它不太明显。

但是我有几个测试类,我希望为所有测试类都提供一个基础them@RichardSilvertass您可以使用
@beforeal
逻辑创建一个抽象类,然后直接继承您的类,你可以照@dehasi说的做,但我有几个测试类,我想为所有的测试类建立一个基础them@RichardSilvertass您可以使用
@beforeal
逻辑创建一个抽象类,然后直接继承您的类即可,您可以按照@dehasi所说的做