【发布时间】:2010-08-12 22:31:23
【问题描述】:
我正在尝试设置一些使用数据库的单元测试。我想在开发人员的计算机上使用测试数据库,而不是在生产数据库上。我现在采用的方法是在连接到数据库时检查环境变量,如果该变量存在则连接到本地而不是生产环境变量。
我可以通过运行配置在 Eclipse 中设置环境变量,但我希望在运行 JUnit 测试时执行此操作(以防万一)。
这在 Eclipse 中可行吗?
【问题讨论】:
我正在尝试设置一些使用数据库的单元测试。我想在开发人员的计算机上使用测试数据库,而不是在生产数据库上。我现在采用的方法是在连接到数据库时检查环境变量,如果该变量存在则连接到本地而不是生产环境变量。
我可以通过运行配置在 Eclipse 中设置环境变量,但我希望在运行 JUnit 测试时执行此操作(以防万一)。
这在 Eclipse 中可行吗?
【问题讨论】:
为什么不将数据库连接注入到需要测试的逻辑中,而只处理启动代码中的环境变量(通常不需要单元测试)?
在测试中使用环境变量通常表明配置在您的代码(IME)中发生得太深。在可能的情况下,我发现通过依赖注入构建具有所需一切的对象要好得多,并将该代码与配置代码分开,从而确定注入的内容。
【讨论】:
我认为硬编码连接信息或测试/生产切换不是最好的主意。
基本上,我们在属性文件中有数据库连接信息。在单元测试中,我们使用另一个包含测试数据库连接信息的属性文件。 (轻量级内存数据库可能是单元测试的最佳选择。)
单元测试通常有自己的设置装置,为每个测试用例构成一个基本环境,因此使用专用属性文件应该不是问题。
【讨论】: