0

我们的数据库是一个postgresql。我们使用 JPA 来管理我们的持久性任务。目前,我们的测试需要有一个 postgres 服务器才能执行。这使得我们在开发盒上运行我们的测试变得很麻烦,因为开发者必须首先安装一个 postgres 服务器,并且它使得从 CI 到我们的发布构建环境的各种构建服务器环境的可移植性变得困难。

在我看来,我应该能够将重量级的数据库服务器换成轻量级的内存版本。我们不做任何 postgres 特定的事情。我们的代码大部分是纯 JPA,带有一些访问特定休眠功能的功能。

4

2 回答 2

1

您可以将数据库依赖注入到需要进行单元测试的代码中。如果您的代码已经依赖于难以注入的 postgressql,您可以使用PowerMock替换您调用的任何静态或构造函数方法,以返回您控制的假货。

您返回的假数据库可以像带有预设值的哈希表一样简单,具体取决于您需要测试的内容。

于 2012-07-13T15:24:22.073 回答
0

你有两种可能。您可以设置单独的 postgres 数据库并让您的 CI 代码连接到它。但是,通常没有必要。如果您的数据库代码不使用非常 postgres 的特定功能,请考虑使用其他内存数据库。例如。h2 或 hsqldb。如果需要,您甚至可以稍微更改代码以使其更具可移植性。第二种选择当然风险更大,因为您的代码总是有可能在内存数据库上运行,但在 postgres 上却不行。然而,第一个选项可能需要更多的管理和维护。

于 2012-07-13T15:50:22.723 回答