使用 Spring 进行集成测试的配置是什么样的?嵌入式 h2 数据源 http://www.h2database.com/html/main.html以及可选的 JUnit?
我第一次尝试单连接数据源 http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/jdbc/datasource/SingleConnectionDataSource.html基本上可以工作,但在更复杂的测试中失败了,在这些测试中您需要同时多个连接或暂停事务。我认为 h2 在基于tcp的服务器模式 https://stackoverflow.com/questions/1503079/start-the-h2-database-in-server-mode-via-spring也可能有效,但这可能不是内存中临时嵌入式数据库最快的通信模式。
有哪些可能性及其优点/缺点?另外,如何创建表/填充数据库?
更新:让我们指定一些对于此类测试很重要的具体要求。
- 数据库应该是临时的并且位于内存中
- 出于速度要求,连接可能不应该使用 tcp
- 如果我可以在调试过程中使用数据库工具检查数据库的内容,那就太好了
- 我们必须定义一个数据源,因为我们不能在单元测试中使用应用程序服务器数据源
但我不知道是否有任何工具可以检查数据库,我认为一个简单的解决方案是使用 Spring 嵌入式数据库(3.1.x 文档 http://docs.spring.io/spring/docs/3.1.x/spring-framework-reference/html/jdbc.html#jdbc-embedded-database-support, 当前文档 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html#jdbc-embedded-database-support),支持 HSQL、H2 和 Derby。
使用 H2,您的 xml 配置将如下所示:
<jdbc:embedded-database id="dataSource" type="H2">
<jdbc:script location="classpath:db-schema.sql"/>
<jdbc:script location="classpath:db-test-data.sql"/>
</jdbc:embedded-database>
如果您更喜欢基于 Java 的配置,您可以实例化一个DataSource
像这样(注意EmbeddedDataBase
延伸DataSource
):
@Bean(destroyMethod = "shutdown")
public EmbeddedDatabase dataSource() {
return new EmbeddedDatabaseBuilder().
setType(EmbeddedDatabaseType.H2).
addScript("db-schema.sql").
addScript("db-test-data.sql").
build();
}
数据库表是由数据库模式.sql脚本,它们填充了来自数据库测试数据.sql script.
不要忘记将 H2 数据库驱动程序添加到您的类路径中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)