从unit testing中启动和停止hsqldb
我正在尝试在内存模式下使用hsqldb创建集成测试。 目前,我必须在运行unit testing之前从命令行启动hsqldb服务器。 我希望能够从我的集成测试中控制hsqldb服务器。 我似乎无法从代码中得到这一切。
更新:
这似乎与在类路径中有一个hibernate.cfg.xml文件一起工作:
org.hsqldb.Server.main(new String[]{});
在我的hibernate.cfg.xml文件中:
org.hsqldb.jdbcDriver jdbc:hsqldb:mem:ww sa 1 org.hibernate.dialect.HSQLDialect thread org.hibernate.cache.NoCacheProvider update
更新看起来这只是在使用jUnit和内置测试运行器从Eclipse中运行unit testing时的一个问题。 如果我跑
mvn test
他们被正确执行,没有例外。 就依赖性而言,我是否遗漏了一些东西? 我使用了生成eclipse项目
mvn eclipse:eclipse
我的pom是:
4.0.0 com.myproject myproject 1.0-SNAPSHOT war myproject jstl jstl 1.1.2 taglibs standard 1.1.2 org.hibernate hibernate-core 3.3.2.GA com.oracle ojdbc14 10.1.0.4.0 org.slf4j slf4j-api 1.6.0 org.slf4j slf4j-simple 1.6.0 log4j log4j 1.2.14 javassist javassist 3.8.0.GA org.hibernate hibernate-annotations 3.4.0.GA junit junit 4.8.1 test org.easymock easymock 3.0 test hsqldb hsqldb 1.8.0.1 test org.mortbay.jetty jetty-servlet-tester 6.1.24 test org.apache.tomcat servlet-api 6.0.26 provided org.apache.tomcat jsp-api 6.0.26 ww_main org.apache.maven.plugins maven-compiler-plugin 1.6 1.6 org.mortbay.jetty maven-jetty-plugin UTF-8
更新确定,不知道这里究竟出了什么问题,但我似乎已经解决了。 我删除了HSQLDB创建的所有文件,以及我的Maven目标文件夹中的所有已创建的文件,使用maven做了一个干净的,重新创建的eclipse .project并在eclipse中刷新了项目。 我想我可能已经从以前的配置遗留了一些东西。
谢谢大家的帮助!
我使用以下配置(直接受Hibernate教程启发)没有任何问题:
1 thread org.hibernate.cache.NoCacheProvider true
使用内存中的HSQLDB时,无需显式启动任何内容。 只需使用mem:
protocol,内存数据库将从JDBC开始。
也可以看看
- 使用HSQLDB对Hibernate进行unit testing
尝试将此附加到jdbcurl:
;ifexists=true;shutdown=true;
在你的关机方法就行了
Statement st = conn.createStatement(); st.execute("SHUTDOWN"); conn.close();
如何通过Runtime.getRuntime().exec("shell command here")
启动服务器? 对于所有测试,您只需执行一次,因此不会增加太大的延迟。
更新
好的,看起来你自己已经解决了:)
更新2
要在unit testing之前(或之后)执行一些代码,您可以
static class TestWrapper extends TestSetup { TestWrapper(TestSuite suite) { super(suite); } protected void setUp() throws Exception { // start db } protected void tearDown() throws Exception { // kill db } }
然后,将测试集包装在其中: new TestWrapper(suite)
检查我的hsqldb maven插件: https : //github.com/avianey/hsqldb-maven-plugin
您可以像测试中的jetty-maven-plugin或tomee-maven-plugin一样启动/停止它:
fr.avianey.mojo hsqldb-maven-plugin 1.0.0 org.hsqldb.jdbcDriver mem:test localhost xdb sa SELECT 1 FROM INFORMATION_SCHEMA.SYSTEM_USERS start-hsqldb pre-integration-test start stop-hsqldb post-integration-test stop
也许这可能有助于在unit testing中以服务器模式启动HSQL,但是在同一个JVM中。 示例代码运行org.hsqldb.server.WebServer(即端口80),但您可以使用org.hsqldb.server.Server。 您可以在上面调用setPort来覆盖默认端口。