我们在这里有一种奇怪的情况,即使用TFS 2012在新创建的实验室环境中导致我们的自动化测试失败。
我们总是有一堆'单元'测试来测试我们的DAL代码,而DAL代码又使用Enterprise Library Data Application Block来对数据库执行操作。这是几年前设置的,使我们的客户能够选择SqlServer或Oracle数据库以及我们的产品,利用DatabaseFactory类以及entlib.data中所有支持的通用接口和类。我之所以提到'单位'是因为这些实际上不是纯粹的单元测试,而是集成测试,因为它们需要一个真正的数据库才能工作。
要针对两个数据库测试相同的SQL代码,我们在TFS项目分支的“Resources”文件夹中维护两个单独的.config文件,指向我们的测试数据库:
Resources\SqlServer\ConnectionStrings.config
(SqlServer特定连接字符串)Resources\Oracle\ConnectionStrings.config
(Oracle特定连接字符串)在根资源文件夹中,有两个附带的.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来启动运行。
直到今天,我才发现tests started through Microsoft Test Manager ignore the Visual Studio .testsettings files。现在我正在尝试在我们的实验室环境中运行这些相同的测试但是未部署ConnectionStrings.config文件(可以理解)并且测试失败。
如果不使用.testsettings文件,我们怎样才能实现这一目标?在我们的新x64构建服务器中尝试正确设置oracle之后,我们遇到了巨大的麻烦,我们在构建定义中禁用了Oracle测试。现在我们开始设置我们的实验室环境,我们考虑使用Oracle在整个系统中配置其中一台机器,使我们能够再次使用oracle特定的连接字符串运行这些“单元测试”来验证我们的查询。同时,我们希望继续使用SqlServer在本地和构建服务器上测试所有内容。
我认为在这种情况下使用[DeploymentItem]
是不可能的,因为它适用于静态文件而不是可选择的动态文件,例如我们当前的设置。
我们可以使用与MTM / Lab Env中的TestCases一起使用的.testsettings部署过程吗?在我们的TestPlan的Properties
选项卡上,我可以看到Automated Runs -> Test Settings
选项,但这似乎只允许通过指定绝对路径(实际上将在目标计算机上解析)进行部署。有没有办法在那里指定相对路径,指向在TFS上签入的ConnectionStrings.config文件?也许我还缺少另一种替代方案,可能使用多种构建配置?
答案 0 :(得分:1)
通过进入 Configuration Manager 并单击 Active solution configurations 下的 New ,为每种服务器类型创建单独的构建配置。编辑项目文件并执行以下操作:
<PropertyGroup Condition="'$(Configuration)' == 'Oracle'">
<appConfig>App.Oracle.Config</AppConfig>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'SQL'">
<appConfig>App.SQL.Config</AppConfig>
</PropertyGroup>
然后确保每个配置文件中都有正确的连接字符串。然后,您可以使用这些构建配置将TFS配置为构建。
有关使用PropertyGroup and Condition,MSBuild Configurations和MSBuild project properties
的详情