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

时间:2017-11-06 10:10:53

标签: java integration-testing

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

  • 设置应用程序上下文
  • 创建测试数据库
  • 使用数据填充测试数据库

每次集成测试总是要做这三个初始步骤需要时间。我希望它们成为所有集成测试的基础。 有没有人有这方面的经验,可以用文章,工具,线程等指出我正确的方向?

感谢任何帮助!

/理查德

2 个答案:

答案 0 :(得分:2)

你应该使用Junit5的@BeforeAll

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

因此,使用该方法,所有数据库设置都可以针对类进行一次,而不是针对每种方法进行一次。

答案 1 :(得分:1)

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

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

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>

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