我正在为现有项目设置一些测试脚手架。这包括一些集成测试,使用JUnit和DbUnit。我还为持续集成建立了Jenkins安装。JUnit + DbUnit:在开发和测试环境之间切换数据库连接
我的问题涉及更改开发和测试环境之间的数据库连接。我在本地安装了自己的产品堆栈,用于快速临时测试和调查。正如我正在开发的那样,我对我的私人数据库运行测试,因为它速度更快,而且我不会因为错误的正在运行的代码而毁掉其他人的一天。
代码签入后,詹金斯将运行我的测试。现在它仍然指向我的本地数据库。我宁愿让Jenkins针对不同的数据库运行测试,这个数据库位于测试环境中。
是否有一个最佳实践/策略/技术/等改变数据库连接进行测试,而无需更改代码?如果解决方案允许Jenkins针对多个DB运行相同的测试(应该可能,因为DbUnit是不可知的)。
编辑更多信息:
该产品是一个大的,具有几十种不同的相互作用的部件的(通常在独立的虚拟机/进程)。在实时系统中,不同的进程通常通过数据库来传达。 IE中,UI进程将更改写入表中,后端进程则对该表进行轮询以查找更改。是的,这很糟糕。对于集成测试,我使用UI配置系统并使用DbUnit捕获该状态。然后我可以针对该“输入”运行测试。
我的组件和所有新组件都由maven管理。数据库连接目前在测试设置中被硬编码。 DbUnit系统工作;我希望能够切换我的测试所引用的数据库,具体取决于它们是由我在开发环境中运行的,还是由测试环境中的Jenkins运行。
当谈到Spring时,我很尴尬,但是我知道的很少让我相信它可能是一个有用的解决方案。我的印象是你在xml中配置了数据源,并注释你的类用于运行时依赖注入。 Spring能够根据环境更改注入哪个数据库(开发与测试)? –
对于使用XML配置数据库连接是正确的。但是,对于你想要完成的任务,我认为你应该专注于Maven将为你做什么,以及如何利用你的构建的Maven属性和配置文件来定制你的构建并运行你的测试。 Maven可以运行你的单元测试,它的资源只在测试阶段使用,然后它可以为你的主构建使用另一组资源,这些资源适用于任何环境。 Jenkins运行maven构建,因此您可以在您的机器上模拟Jenkins将要做的完全相同的事情。 – BenSchro10