如何使用H2内存数据库编写单元测试

时间:2019-02-21 08:34:45

标签: unit-testing h2

我的问题可能有点奇怪,但是我真的不知道如何为已经存在的应用程序编写单元测试(我知道我应该先编写单元测试,然后再编写主要源代码)。

我的应用程序由一些表组成,这些表将从Java类中自动创建。我的生产数据库是PostgreSQL。

现在,我想用我的H2数据库编写一些单元测试。 但是,我使用了H2不支持的某些数据类型(一些特殊的注释-date / time)。

现在我应该在测试包中使用正确的数据类型编写新的错误模型类,以便H2能够创建表吗? 还是还有其他我不知道的方法?

非常感谢您的帮助和提前提示!

1 个答案:

答案 0 :(得分:1)

Pitty看到您的问题被否决了,没有讨论任何原因。有人认为它不清楚或充实吗?很难说。

我想建议编写不正确的模型类,以便H2可以代表Postgress是一个坏主意。这可能会导致测试套件与生产代码之间的阻抗不匹配,从而难以维护。更重要的是,基于错误模型的测试可能无法测试任何有用的东西。他们可能在理论上使用数据库而不是模型或有关应用程序的任何重要信息。最后,假设您或其他人希望在将来的某个时候加入测试以进行性能基准测试;针对错误的dbms使用错误的模型进行的测试将毫无用处。

我更喜欢在整个管道中使用相同的dbms,包括dev,test,staging,prod等。我知道,出于速度或许可方面的考虑,在某些地方使用不同的数据库并不少见,但是如果我不必这样做,那我就不会。就您而言,我可以想到一些选择。

  1. 嵌入的后端。我见过several projects嵌入Prostgres。环顾四周,尝试一些,坚持使用似乎最合适的那个。

  2. 尝试使用RAM磁盘或tmpfs。 Linux可以创建基于内存的文件系统。创建一个,挂载它,然后让Postgres使用它。做一些测试,看看它是否确实提供了明显的性能优势。其他操作系统可能具有类似的功能。

  3. 使用标准Postgress。在标准安装的Postgress上运行测试;换句话说,没有花哨的东西,没有过早的优化,只是走了最简单,最直接的道路。这就是我要做的。

  4. 用H2代替Postgres ...但是不要。我同时使用H2和Postgress,但我都喜欢,但是您已经在产品中使用Postgres,因此没有充分的理由进行更改。

好运。