Отключить выбранные автоматические тесты во время выполнения - PullRequest
1 голос
/ 30 апреля 2010

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

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

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

Есть идеи?

1 Ответ

0 голосов
/ 24 ноября 2011

Наконец-то я понял, вот что я сделал.

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

...