2010-04-30 68 views
1

是否可以在运行时禁用选定的自动化测试?在运行时禁用选定的自动化测试

我使用VSTS和犀牛制品,并且必须安装需要外部扶养一些intergation测试(MQ)。并非我所有团队的开发人员都已安装。

目前所有需要MQ测试从如果安装了MQ,检查一个基类继承,如果不设置测试结果尚无定论。这可以起到阻止测试运行的作用,但会将测试运行标记为不合格,并可能隐藏其他故障。

任何想法?

回答

0

最后得到了一个弄清楚这一点,这是我做的。

在我的每一个测试类(或如果只有在类测试少数需要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集成测试,而不会失败用户的测试运行。

相关问题