首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何对使用bpchar的h2数据库进行单元测试?

如何对使用bpchar的h2数据库进行单元测试?
EN

Stack Overflow用户
提问于 2019-06-04 04:23:21
回答 1查看 616关注 0票数 0

我有一个spring + hibernate应用程序,它使用postgres数据库。我需要为控制器编写单元测试。对于测试,我想使用h2数据库,但不幸的是,在创建-删除过程中测试崩溃,给我留下了bpchar数据类型无效的信息。我想知道如何解决这个问题,以便我可以运行测试。

我不能使用bpchar将我的列更改为varchar,它需要保持原样。我也尝试设置postgresql模式,但没有帮助。我唯一的解决方案是使用嵌入式postgres数据库来执行测试,这是对的吗?还是有其他我可以使用的方法?

EN

回答 1

Stack Overflow用户

发布于 2019-06-04 05:30:57

解决这个问题的一种有趣的方法是Test Containers

由于Postgres没有嵌入式模式,但您可以在测试前使用上述框架启动docker容器,如果您使用的是Flyway或Liquibase或集成您的自定义解决方案,请创建一个模式并应用迁移。

其想法是,容器将在运行时准备好并可供测试使用。测试通过后(无论实际结果、成功还是失败),您都可以停止容器。

启动容器可能非常昂贵(大约几秒钟),但是您可以在测试期间利用spring缓存配置,因此当模块中的第一个测试启动时,容器实际上是启动的,但是,它在测试和测试用例之间得到重用,因为应用程序上下文不会重新启动。

由于您将spring的@Transactional注释放在测试用例上,因此在测试之间保持数据库的整洁也成为一项微不足道的任务,因此spring会在每次测试后人为地回滚事务。因为在Postgres中,即使是DDL命令也可以是事务性的,这应该足够好了。

这种方法的唯一限制是,如果你计划在本地运行这些测试,你应该在构建机器或本地开发机器上有一个可用的docker (在Linux和Mac OS上无论如何这都不是问题,但在Windows上,你至少需要有Windows 10专业版才能安装docker环境)。

我在实际项目中使用了这种方法,并发现它对集成测试非常有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56434081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档