JUnit + DbUnit:在开发和测试环境之间切换数据库连接

Eri*_*zke 5 java testing junit dbunit development-environment

我正在围绕现有项目设置一些测试脚手架.这包括使用JUnit和DbUnit的一些集成测试.我还设置了Jenkins安装以进行持续集成.

我的问题涉及更改开发和测试环境之间的数据库连接.我在本地安装了自己的产品堆栈,以便进行快速的临时测试和调查.在我开发的时候,我对我的私人数据库运行测试,因为它更快,我不会因为有问题的工作进程代码而毁掉任何其他人的日子.

签入代码后,Jenkins将运行我的测试.现在它仍然指向我的本地数据库.我更愿意让Jenkins针对不同的数据库运行测试,这个数据库位于测试环境中.

是否有最佳实践/策略/技术/等更改数据库连接以进行测试而无需更改代码?如果解决方案允许Jenkins对多个DB运行相同的测试,那么奖励点(应该是可能的,因为DbUnit是不可知的).


编辑更多信息:

该产品很大,具有许多不同的交互组件(通常在单独的vms /进程中).在实时系统中,不同的进程通常通过数据库进行通信.IE,UI进程将更改写入表,后端进程轮询该表以进行更改.是的,太可怕了.对于集成测试,我使用UI配置系统并使用DbUnit捕获该状态.然后,我可以针对该"输入"运行测试.

我的组件和所有新组件都由maven管理.数据库连接当前在测试设置中是硬编码的.DbUnit系统有效; 我只是希望能够切换我的测试引用的数据库,具体取决于它们是在我的开发环境中运行,还是由Jenkins在测试环境中运行.

Kkk*_*kev 5

假设您可以将测试的数据库连接参数外部化为.properties.xml文件,并且您正在使用Maven,那么一种方法是使用Maven属性(以及可选的配置文件)来定义每个环境,并使用资源过滤来配置这些属性进入配置文件.

例如,您管理您的外化数据库连接参数到一个名为测试中假设datasource.propertiessrc/test/resources,看起来像这样:

datasource.driverClassName = ${test.datasource.driverClassName}
datasource.url = ${test.datasource.url}
datasource.username = ${test.datasource.username}
datasource.password = ${test.datasource.password}
Run Code Online (Sandbox Code Playgroud)

你在POM中有这个:

<build>
  <testResources>
    <testResource>
      <directory>src/test/resources</directory>
      <filtering>true</filtering>
    </testResource>
  </testResources>
</build>
Run Code Online (Sandbox Code Playgroud)

然后,您可以test.datasource.driverClassName通过各种方式定义等属性,以告诉Maven使用不同的数据库:

  • 您可以在<properties>POM 的部分中定义默认值;
  • 您可以在<properties>每个开发人员(和Jenkins')的部分中定义用户特定的数据库settings.xml;
  • 你可以在你的POM针对不同的环境(例如,定义了一些配置文件development,jenkins,anotherDB),并以不同的配置运行构建.

如果您选择最后一个选项,那么您可以通过从一个Jenkins项目执行多个Maven构建来使Jenkins针对多个数据库运行,而不仅仅是通过配置文件.也就是说,为每个环境设置不同的Jenkins项目会更好.