创建跨Maven的测试阶段工作的临时数据库?(Creating temporary database

2019-07-19 09:50发布

我加入,有很多与创建用于集成测试数据库的SQL语句的文件的项目。

我不知道我该如何使用这些文件(使用Java和Maven)创建单元测试的数据库。

我可以创建一个HSQL内存数据库的每个单元测试,甚至可以使用Spring JDBC中的嵌入数据库功能,但有这么多的SQL语句在测试设置来执行,这是不可扩展的。

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

我已经看了SQL-Maven的插件,它可以让我做了测试阶段执行,但我不知道如何配置临时数据库,这将是在所有的单元测试可用。 有没有服务器连接到,并在内存数据库不会在多个单元测试(我认为)工作。

一种选择是使用一个唯一的临时文件,比如指定JDBC驱动程序URL为JDBC:HSQLDB:文件:/路径/到/临时/文件,但我不知道如何生成的行家一个唯一的临时文件。

如何做到这一点的任何建议,或者如果有一个更好的办法来取?

更新:我决定使用在目标/ db目录中创建一个基于文件的数据库。 我使用maven清洁插件测试运行之前删除目标/ db目录和行家SQL插件创建通过脚本数据库。

Answer 1:

对于这种情况,我创建了德比- Maven的插件 。 这是从中央Maven的,所以你不需要添加任何额外的仓库或任何东西。

你可以使用这样的:

    <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>

欲了解更多信息,你也可以检查用法 。



Answer 2:

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

  2. 更应如此:刚刚在@Before创建内存数据库和@After删除它们。 你确定这是太慢?

  3. 在预集成测试,你可以启动一个H2(或Derby)服务器,并关闭它后的集成测试。

  4. 您可以编写使用会话状态来跟踪嵌入式数据库服务的一个M​​aven插件,但这是一样一样的(3)。



文章来源: Creating temporary database that works across maven test phases?
标签: sql maven junit