从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来覆盖默认端口。

https://stackoverflow.com/a/37784679/15789