是否可以在运行时禁用选定的自动化测试?在运行时禁用选定的自动化测试
我使用VSTS和犀牛制品,并且必须安装需要外部扶养一些intergation测试(MQ)。并非我所有团队的开发人员都已安装。
目前所有需要MQ测试从如果安装了MQ,检查一个基类继承,如果不设置测试结果尚无定论。这可以起到阻止测试运行的作用,但会将测试运行标记为不合格,并可能隐藏其他故障。
任何想法?
是否可以在运行时禁用选定的自动化测试?在运行时禁用选定的自动化测试
我使用VSTS和犀牛制品,并且必须安装需要外部扶养一些intergation测试(MQ)。并非我所有团队的开发人员都已安装。
目前所有需要MQ测试从如果安装了MQ,检查一个基类继承,如果不设置测试结果尚无定论。这可以起到阻止测试运行的作用,但会将测试运行标记为不合格,并可能隐藏其他故障。
任何想法?
最后得到了一个弄清楚这一点,这是我做的。
在我的每一个测试类(或如果只有在类测试少数需要MQ方法)有MQ依赖关系的添加以下的类(或方法)decleration
#if !RunMQTests
[Ignore]
#endif
这禁用测试,除非您已将条件比较符号RunMQTests
解密,此符号未在项目文件中定义,因此默认情况下禁用测试。
为了使这些测试具有了开发商要记住,如果他们已经安装了MQ和添加或删除条件compalation符号,我创建了一个自定义生成的任务,将告诉我们,如果安装了MQ。
/// <summary>
/// An MSBuild task that checks to see if MQ is installed on the current machine.
/// </summary>
public class IsMQInstalled : Task
{
/* Constructors removed for brevity */
/// <summary>Is MQ installed?</summary>
[Output]
public bool Installed { get; set; }
/// <summary>The method called by MSBuild to run this task.</summary>
/// <returns>true, task will never report failure</returns>
public override bool Execute()
{
try
{
// this will fail with an exception if MQ isn't installed
new MQQueueManager();
Installed = true;
}
catch { /* MQ is not installed */ }
return true;
}
}
然后,我们只需要将这个任务添加到测试项目文件的顶部,就可以将它们连接到构建过程中。
<UsingTask TaskName="IsMQInstalled" AssemblyFile="..\..\References\CustomBuildTasks.dll" />
并调用在BeforeBuild
目标的新的自定义任务,并设置条件compalation符号如果这台机器已经安装了MQ。
<Target Name="BeforeBuild">
<IsMQInstalled>
<Output TaskParameter="Installed" PropertyName="MQInstalled" />
</IsMQInstalled>
<Message Text="Is MQ installed: $(MQInstalled)" Importance="High" />
<PropertyGroup Condition="$(MQInstalled)">
<DefineConstants>$(DefineConstants);RunMQTests</DefineConstants>
</PropertyGroup>
</Target>
这可以让安装了MQ的用户运行我们的MQ集成测试,而不会失败用户的测试运行。