使用 spring、maven 和 hibernate 时,启动 HSQLDB 进行单元测试的最佳方法是什么?

发布于 2024-09-05 17:22:31 字数 136 浏览 4 评论 0原文

在我的项目中,我可以成功测试数据库代码。我正在使用 Spring、Hibernate、HSQLDB、JUnit 和 Maven。

问题是目前我必须在运行测试之前手动启动 HSQLDB。使用所使用的技术自动启动 HSQLDB 的最佳方法是什么?

In my project I can successfully test database code. I'm using Spring, Hibernate, HSQLDB, JUnit and Maven.

The catch is that currently I have to launch HSQLDB manually prior to running the tests. What is the best way to automate the launching of HSQLDB with the technologies being used?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

小女人ら 2024-09-12 17:22:31

我假设 hsql 您指的是 HSQLDB

将 JDBC 驱动程序(用于休眠等)的数据库 URL 配置为基于嵌入式内存的 HSQLDB 版本:

jdbc:hsqldb:mem:myunittests

然后,进程内版本的 HSQLDB 自动启动,将内容存储到内存中。无需启动任何外部服务器。

I am assuming that with hsql you are referring to HSQLDB.

Configure your database url for JDBC drivers (for hibernate etc) to embedded memory based version of HSQLDB:

jdbc:hsqldb:mem:myunittests

Then a inprocess version of HSQLDB automatically starts that stores stuff to memory. No need to start any external servers.

殤城〤 2024-09-12 17:22:31

我自己使用 hsql 内存数据库来测试我的 DAO。因此,我不需要连接到任何外部数据库服务器或有任何网络连接。
使用以下设置:

jdbc.driverClassName=org.hsqldb.jdbc.JDBCDriver

jdbc.url=jdbc:hsqldb:mem:DatabaseName

还包括

<property name="hibernateProperties">
   <props>
     <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
     <prop key="default_schema">test</prop>
     <prop key="hibernate.show_sql">true</prop>
     <prop key="hibernate.format_sql">false</prop>
     <prop key="hibernate.hbm2ddl.auto">create</prop>
   </props>
</property>

这将允许您使用内存数据库,并在执行测试之前自动从 hibernate 对象创建数据库表。

希望这会对您有所帮助。

注意:

当 DBA 在单个数据库中创建多个模式时,将使用“default_schema”属性。我在 postgres 中看到过这一点,其中每个人都使用一个数据库 URL,但在该 URL 下,每个应用程序都有单独的模式。

通过使用默认模式属性,您可以将模式名称保留在实体之外。如果您针对不支持模式的 HSqlDB 运行测试并且针对使用模式的数据库进行部署,则这特别有用。具有空值仅意味着它默认返回数据库默认模式。

I myself use in-memory database of hsql for testing my DAO. As a result, I need not be connected to any external db server or have any network connection.
Use following settings:

jdbc.driverClassName=org.hsqldb.jdbc.JDBCDriver

jdbc.url=jdbc:hsqldb:mem:DatabaseName

Also include the

<property name="hibernateProperties">
   <props>
     <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
     <prop key="default_schema">test</prop>
     <prop key="hibernate.show_sql">true</prop>
     <prop key="hibernate.format_sql">false</prop>
     <prop key="hibernate.hbm2ddl.auto">create</prop>
   </props>
</property>

This will allow you to use the in-memory database and will automatically create the database tables from hibernate objects before executing tests.

Hope this will help you.

Note:

The "default_schema" property is used when your DBA creates multiple schemas within a single database. I've seen this with postgres where everyone uses one database URL but under that there are separate schemas for each application.

By using the default schema property it allows you to keep the schema names off your entities. This is particularly useful if you're running tests against HSqlDB which does not support schemas and you deploy against a DB that is using schemas. Having a null value just means it defaults back to the DB default schema.

一身骄傲 2024-09-12 17:22:31

进程内在内存中,建立连接时将从 JDBC 启动。

Use it in-process or in memory and it will get started from JDBC when establishing a connection.

沐歌 2024-09-12 17:22:31

使用 JUnit,您可以使用以下注释创建一个在测试之前执行的方法:@Before

有关它的 JUnit 文档的链接位于:JUnit 常见问题解答 - 测试装置

With JUnit, you can create a method that is executed before your tests using the following annotation: @Before

The link to the JUnit docs about it is here: JUnit FAQ - Test Fixtures

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文