调试时在内存 hsqldb 中进行检查

2022-09-01 02:17:19

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

jdbc.url=jdbc:hsqldb:mem:testdb;sql.enforce_strict_size=true

每次测试后都会销毁数据库。但是,当调试器运行时,数据库也应该仍然处于活动状态。我尝试过使用sqldb数据库管理器连接。这有效,但我没有看到任何表或数据。任何帮助都非常感谢!


答案 1

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


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

或者用于具有“更多改进”的改进的Swing版本(但功能大致相同)


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

数据库管理器允许您在应用程序运行时检查架构并在实时内存中数据库上运行 SQL 查询。

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


答案 2

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

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

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

或者,您必须根据需要编写从单元测试中调用的某种转储功能。

顺便说一句,在单元测试中使用HSQL只是证明你的代码适用于HSQL,这与实际的数据库不同。这意味着您可能会得到误报,反之亦然。同样的事情可以通过模拟API实现,或者更好的是,保存数据库测试,以便与真实数据库一起使用一些体面的集成测试。


推荐