创建跨maven测试阶段的临时数据库?

时间:2013-02-06 14:13:57

标签: sql maven junit

我加入了一个项目,其中包含大量带有SQL语句的文件,用于创建用于集成测试的数据库。

我想知道如何使用这些文件为单元测试创​​建数据库 (使用java和maven)。

我可以为每个单元测试创​​建一个HSQL内存数据库,甚至可以使用spring jdbc嵌入式数据库功能,但是在测试设置中要执行的SQL语句太多,这是不可扩展的。

所以我想在maven测试阶段开始时创建一个临时数据库(加载SQL语句),让单元测试访问这个临时数据库并执行各种操作,然后在最后删除临时数据库maven测试阶段。

我看过sql-maven-plugin,它允许我进行测试阶段执行,但我不确定如何配置一个可用于所有单元测试的临时数据库。没有服务器可以连接,并且内存数据库不能在多个单元测试中工作(我假设)。

一种选择可以是使用唯一的临时文件,例如将JDBC驱动程序URL指定为jdbc:hsqldb:file:/ path / to / temporary / file,但我不确定如何在maven中生成唯一的临时文件。

有关如何执行此操作的建议,或者是否有更好的方法?

更新:我决定使用在target / db目录中创建的基于文件的数据库。我使用maven clean插件在运行测试之前删除target / db目录,并使用maven sql插件从脚本创建数据库。

2 个答案:

答案 0 :(得分:3)

对于这种情况,我创建了derby-maven-plugin。它可以从Maven Central获得,因此您无需添加任何额外的存储库或任何内容。

您可以像这样使用它:

    <project ...>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.carlspring.maven</groupId>
                    <artifactId>derby-maven-plugin</artifactId>
                    <version>1.8</version>
                    <configuration>
                        <basedir>${project.build.directory}/derby</basedir>
                        <port>1527</port>
                    </configuration>
                    <executions>
                        <execution>
                            <id>start-derby</id>
                            <phase>pre-integration-test</phase>
                            <goals>
                                <goal>start</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>stop-derby</id>
                            <phase>post-integration-test</phase>
                            <goals>
                                <goal>stop</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </project>

有关详细信息,您还可以查看USAGE

答案 1 :(得分:0)

  1. 为什么不创建磁盘上的H2数据库,并让每个测试访问它?只要测试不并行运行或相互交互,您就不需要服务器。

  2. 更重要的是:只需在@Before中创建内存数据库并在@After中删除它们。你确定那太慢了吗?

  3. 在预集成测试中,您可以启动H2(或derby)服务器,并在集成后测试中将其关闭。

  4. 您可以编写一个使用会话状态来跟踪嵌入式数据库服务的maven插件,但这与(3)非常相似。