![](/img/trans.png)
[英]Is it possible to run TestNG integration-tests in a Jetty container with JNDI's and spring context?
[英]Integration tests using jetty, hsql, jndi, and spring
我正在尝试使用Jetty访问本地HSQL数据库为Spring Web应用程序创建一些集成测试。 目标:使用Selenium(或类似工具)运行测试,对所有外部系统进行模拟/存根,并设置要命中的HSQL数据库而不是我们的共享Oracle数据库。 测试在Maven构建期间开始(集成测试阶段)。 该数据库由Spring的“ jdbc:initialize-database”初始化,并在Jetty中注册为JNDI数据源。
经过数天的尝试不同的配置,我终于到达创建,初始化数据库的地步,我认为已注册为Jetty资源,但是当测试用例运行时,它就挂了; 我认为是因为它正在等待数据库变得可用。
Maven配置
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.3.3</version>
<executions>
<execution>
<id>start</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>stop</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
<configuration>
<container>
<containerId>jetty7x</containerId>
<dependencies>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
</dependency>
</dependencies>
</container>
<configuration>
<home>${project.build.directory}/cargo/configurations/jetty7x</home>
<properties>
<cargo.jetty.createContextXml>false</cargo.jetty.createContextXml>
<cargo.datasource.datasource>
cargo.datasource.url=jdbc:hsqldb:file:../../../myDB|
cargo.datasource.driver=org.hsqldb.jdbcDriver|
cargo.datasource.username=sa|
cargo.datasource.password=|
cargo.datasource.type=javax.sql.DataSource|
cargo.datasource.jndi=jdbc/myDataSource
</cargo.datasource.datasource>
</properties>
</configuration>
<deployables>
<deployable>
<location>target/myApp</location>
<properties>
<context>myApp</context>
</properties>
</deployable>
</deployables>
</configuration>
</plugin>
弹簧配置
<bean id="localDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="org.hsqldb.jdbcDriver"/>
<property name="jdbcUrl" value="jdbc:hsqldb:file:target/myDB"/>
<property name="user" value="sa"/>
<property name="password" value=""/>
</bean>
<jdbc:initialize-database data-source="mydataSource" ignore-failures="DROPS">
<jdbc:script location="classpath:/sql-scripts/schema/create-schema.sql"/>
<jdbc:script location="classpath:/sql-scripts/schema/create-tables.sql"/>
<jdbc:script location="classpath:/sql-scripts/testdata/data-load.sql"/>
</jdbc:initialize-database>
我可能丢失了一些东西,我尝试通过许多其他文章的建议来整理配置。 任何帮助,将不胜感激。
使用HSQLDB进行测试(尤其是复杂的测试设置)的推荐方法是运行服务器。
最初,您使用外壳启动HSQLDB服务器,而与测试设置无关。 使用服务器属性server.silent=false
可以立即在控制台上查看连接和语句。
取得一些进展后,您可以自定义服务器设置。 请参阅指南:
http://www.hsqldb.org/doc/2.0/guide/listeners-chapt.html
以及不同测试选项的摘要:
http://www.hsqldb.org/doc/2.0/guide/deployment-chapt.html#dec_app_dev_testing
您可能需要使用MVCC交易模型。 这减少了锁,有时避免由于一个等待另一个提交而导致连接挂起。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.