在调试时检查内存hsqldb

Alb*_*ert 39 java unit-testing hsqldb

我们在内存中使用hdsqldb来运行针对数据库运行的junit测试.在通过弹簧配置运行每个测试之前设置db.一切正常.现在,当测试失败时,可以方便地检查内存数据库中的值.这可能吗?如果是这样的话?我们的网址是:

jdbc.url = JDBC:HSQLDB:MEM:TESTDB; sql.enforce_strict_size =真

每次测试后都会销毁数据库.但是当调试器运行时,数据库也应该仍然存在.我尝试连接sqldb databaseManager.这工作,但我没有看到任何表或数据.任何帮助都非常感谢!

dim*_*mdm 69

在单元测试或@Before/ setUp()方法中,您可以添加以下行来启动HSQL数据库管理器:


org.hsqldb.util.DatabaseManager.main(new String[] {
  "--url",  "jdbc:hsqldb:mem:testdb", "--noexit"
});
Run Code Online (Sandbox Code Playgroud)

或者用于改进的Swing版本


org.hsqldb.util.DatabaseManagerSwing.main(new String[] {
  "--url",  "jdbc:hsqldb:mem:testdb", "--noexit"
});
Run Code Online (Sandbox Code Playgroud)

数据库管理器允许您在应用程序运行时检查模式并在实时内存数据库中运行SQL查询.

如果要检查特定行的数据库状态,请确保设置一个beakpoint或以某种方式暂停执行.

  • 当我按照你的建议操作时,DatabaseManager启动,但冻结.我无能为力.如果我强行退出它,调试会话也会死掉.我正在使用Intellij Idea 11.1.2. (5认同)
  • 请注意,我必须在`@ Before`方法中添加一行`System.setProperty("java.awt.headless","false")`以防止抛出`java.awt.HeadlessException`(即使在Windows开发机器上) (4认同)
  • 有关如何保持DatabaseManager的讨论,请参见此处(http://stackoverflow.com/questions/11435654/connect-to-in-memory-hsql-hypersonic-database-with-databasemanager-while-debug/11437102#11437102)冷冻. (2认同)

Nic*_*olt 17

HSQL在内存中,所以当你说你正在连接SQLDB数据库管理器时,你不是 - 而是连接到SQLDB数据库管理器的内存空间中的另一个数据库,而不是连接到SQLDB数据库管理器的内存空间中的数据库.单元测试.这就是SQLDB数据库管理器中的数据库为空的原因.

您可以使用此处org.hsqldb.Server所述的方式将HSQL作为服务器运行.

尽管org.hsqldb.Server该类通常用于启动单独的进程,但您可以在单元测试中对其进行实例化和配置,这应该允许远程进程连接和查询数据库.

或者,您必须编写某种转储功能,可以根据需要在单元测试中调用.

另外,在单元测试中使用HSQL只是证明您的代码可以对抗HSQL,这与实际数据库不同.这意味着你可以得到误报,反之亦然.使用模拟API或更好的API可以实现同样的目的,保存数据库测试以进行与真实数据库一起使用的一些体面的集成测试.


Gwa*_*iva 15

将单元测试运行到断点,然后在Eclipse的Debug透视图中,打开Display视图(Window,Show View,Display)并输入

    org.hsqldb.util.DatabaseManagerSwing.main(new String[] {
  "--url",  "jdbc:hsqldb:mem:testdb", "--noexit"
});
Run Code Online (Sandbox Code Playgroud)

(根据dimdm的帖子),突出显示它,右键单击并选择执行.

在此输入图像描述

  • HSQL 数据库管理器在执行 SQL 时冻结,就像@dimdms 的帖子一样。 (3认同)