使用内存数据库进行PostgreSQL jsonb测试

时间:2018-07-05 12:01:22

标签: postgresql testing junit h2 hsqldb

我在生产中使用了postgres,并且其中的表具有jsonb类型的列。我正在尝试使用junits和内存嵌入式数据库测试这些查询。

过去,我使用H2和HSQL来测试在MySql或Sybase上运行的查询。但是,由于H2 / HSQL不支持jsonb类型,因此在postgres上使用它们时遇到了麻烦。

Caused by: org.hsqldb.HsqlException: type not found or user lacks privilege: JSONB
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.ParserDQL.readTypeDefinition(Unknown Source)
at org.hsqldb.ParserTable.readColumnDefinitionOrNull(Unknown Source)
at org.hsqldb.ParserTable.readTableContentsSource(Unknown Source)
at org.hsqldb.ParserTable.compileCreateTableBody(Unknown Source)
at org.hsqldb.ParserTable.compileCreateTable(Unknown Source)
at org.hsqldb.ParserDDL.compileCreate(Unknown Source)
at org.hsqldb.ParserCommand.compilePart(Unknown Source)
at org.hsqldb.ParserCommand.compileStatements(Unknown Source)
at org.hsqldb.Session.executeDirectStatement(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)
... 18 more

是否有其他替代方法可用,或者是否缺少使jsonb与H2 / HSQL一起使用的技巧?

1 个答案:

答案 0 :(得分:0)

H2不支持JSONB列类型,找到此替代方法, 在postgres中创建测试数据库,并在集成测试中使用

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles({"test"})

在application-test.yml中定义db属性