Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 我如何在不要求postgres服务器存在的情况下对我的JPA代码进行单元测试?_Unit Testing_Postgresql_Jpa_Continuous Integration - Fatal编程技术网

Unit testing 我如何在不要求postgres服务器存在的情况下对我的JPA代码进行单元测试?

Unit testing 我如何在不要求postgres服务器存在的情况下对我的JPA代码进行单元测试?,unit-testing,postgresql,jpa,continuous-integration,Unit Testing,Postgresql,Jpa,Continuous Integration,我们的数据库是postgresql。我们使用JPA来管理持久性任务。目前,我们的测试需要有postgres服务器才能执行。这使得我们在dev机器上运行测试变得很麻烦,因为dev必须首先安装一个postgres服务器,这使得从CI到发布构建环境的各种构建服务器环境的可移植性变得困难 在我看来,我应该能够将重量级db服务器切换为轻量级内存版本。我们不做任何针对博士后的事情。我们的代码大部分是纯JPA,带有一些特定于hibernate的功能 您可以将数据库转换为需要进行单元测试的代码。如果您的代码已经

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

在我看来,我应该能够将重量级db服务器切换为轻量级内存版本。我们不做任何针对博士后的事情。我们的代码大部分是纯JPA,带有一些特定于hibernate的功能

您可以将数据库转换为需要进行单元测试的代码。如果您的代码已经对postgressql具有难以注入的依赖项,那么您可以使用这些依赖项替换您调用的任何静态或构造函数方法,以返回您控制的伪代码


根据需要测试的内容,返回的假数据库可以像一个带有预设值的哈希表一样简单。

您有两种可能。您可以设置单独的postgres数据库,并使您的CI代码连接到该数据库。然而,这通常是没有必要的。如果您的数据库代码没有使用postgres特有的功能,请考虑使用其他内存中的数据库。例如h2或hsqldb。如果需要,您甚至可以稍微更改代码,使其更易于移植。第二种选择当然有点冒险,因为您的代码总是有可能在内存db上工作,但在postgres上却不工作。但是,第一个选项可能需要更多的管理和维护。

因此,我不接受这些问题。但我觉得我的问题不好,所以我要编辑它。这样更好;)我目前正在研究如何重构我们的DB代码,以便在应用程序运行时能够针对“真实”的持久性单元执行,在单元测试运行时能够针对“虚假”的测试持久性单元执行。唯一的区别是测试持久性单元的db配置方面指向内存中的db。