Отключить выбранные автоматические тесты во время выполнения

Можно ли отключить выбранные автоматические тесты во время выполнения?

Я использую VSTS и насмешки rhino и имею несколько тестов интеграции, для которых требуется установка внешней зависимости (MQ). Не все разработчики в моей команде установили это.

В настоящее время все тесты, для которых требуется MQ, наследуются от базового класса, который проверяет, установлен ли MQ, и если он не установлен, результат теста становится неубедительным. Это работает, поскольку останавливает выполнение тестов, но отмечает выполнение теста как неудачное и может скрыть другие сбои.

Любые идеи?


person squig    schedule 30.04.2010    source источник


Ответы (1)


Наконец, надо было разобраться в этом, вот что я сделал.

В каждом из моих тестовых классов (или методов, если только небольшое количество тестов в классе требует MQ), которые имеют зависимости от MQ, я добавил следующее к отклонению класса (или метода)

#if !RunMQTests
    [Ignore]
#endif

Это отключает тесты, если у вас не отключен символ условного сравнения RunMQTests, этот символ не определен в файлах проекта, поэтому тесты отключены по умолчанию.

Чтобы включить эти тесты, и разработчикам не нужно помнить, установлен ли у них MQ и добавлен или удален символ условного сравнения, я создал настраиваемую задачу сборки, которая сообщит нам, установлен ли 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 target и установите символ условного сравнения, если на этом компьютере установлен 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, не проваливая тестовые прогоны для пользователей, которые этого не делают.

person squig    schedule 24.11.2011