我们这里有一个特殊的情况,它导致我们的自动化测试在使用 TFS 2012 的新创建的实验室环境中失败。
我们一直有一堆“单元”测试来测试我们的 DAL 代码,而 DAL 代码又使用企业库数据应用程序块对数据库执行操作。这是几年前设置的,使我们的客户能够在我们的产品旁边选择 SqlServer 或 Oracle 数据库,利用DatabaseFactory类和 entlib.data 中所有支持的通用接口和类。我提到这样的“单元”是因为这些实际上不是纯粹的单元测试,而是集成测试,因为它们需要一个真正的数据库才能工作。
为了针对两个数据库测试相同的 SQL 代码,我们在 TFS 项目分支的“Resources”文件夹中维护两个单独的 .config 文件,指向我们的测试数据库:
Resources\SqlServer\ConnectionStrings.config
(SqlServer 特定的连接字符串)Resources\Oracle\ConnectionStrings.config
(Oracle 特定的连接字符串)
在根 Resources 文件夹中,有两个随附的 .testsettings 文件,负责部署特定于每个数据库的文件:
Resources\SqlServer.testsettings
(部署 SqlServer\ConnectionStrings.config 文件)Resources\Oracle.testsettings
(部署 Oracle\ConnectionStrings.config 文件)
由于整个结构都在源代码控制中,因此 testsettings 能够通过使用相对路径找到 .config 文件,从而使我们能够测试所有内容而无需手动设置参数。在开发机器上,我们总是SqlServer.testsettings
在运行测试时选择文件,这样他们就不需要安装整个 oracle 环境来验证他们的更改,然后再签入代码。验证的 Oracle 方面总是发生在我们的构建过程中,我们实际上对每个方法进行了两次测试:首先使用SqlServer.testsettings
开发人员使用的相同方法,然后使用Oracle.testsettings
.
这样,我们可以设置测试程序集的 app.configs 以将 connectionStrings 节点重定向到外部文件,如下所示:
<configuration>
<connectionStrings configSource="ConnectionStrings.config"/>
...
运行测试时,mstest 将足够的 ConnectionStrings.config 文件复制到测试的工作文件夹,基于该 .testsettings 用于启动运行。
直到今天,当我发现通过 Microsoft 测试管理器启动的测试忽略了 Visual Studio .testsettings 文件时,这一切都很好。现在我试图在我们的实验室环境中运行这些相同的测试,但是 ConnectionStrings.config 文件没有部署(可以理解)并且测试失败。
我们如何在不使用 .testsettings 文件的情况下实现这一点?在尝试在我们的新 x64 构建服务器中正确设置 oracle 感到非常头疼之后,我们在构建定义中禁用了 Oracle 测试。现在我们开始设置我们的实验室环境,我们考虑让其中一台机器使用 Oracle 配置我们的整个系统,使我们能够再次使用特定于 Oracle 的连接字符串运行这些“单元测试”来验证我们的查询。同时,我们希望在本地和使用 SqlServer 的构建服务器上继续测试所有内容。
我认为[DeploymentItem]
在这种情况下使用是不可能的,因为它适用于静态文件,而不是像我们当前设置的可选择的动态文件。
是否有任何等效的 .testsettings 部署过程可以用于 MTM/Lab Env 中的 TestCases?在Properties
我们的 TestPlan 选项卡上,我可以看到该Automated Runs -> Test Settings
选项,但这似乎只允许通过指定绝对路径进行部署(这实际上将在目标机器上解析)。有没有办法在那里指定一个相对路径,指向我们在 TFS 上签入的 ConnectionStrings.config 文件?也许还存在我缺少的另一种选择,可能使用多个构建配置?