Поделиться через


Настройка MSTest

MSTest, Microsoft Testing Framework, — это платформа тестирования для приложений .NET. Он позволяет создавать и выполнять тесты, а также предоставлять наборы тестов с интеграцией с Visual Studio и Обозревателями тестов Visual Studio Code, интерфейсом командной строки .NET и многими конвейерами CI.

MSTest — это полностью поддерживаемая платформа с открытым исходным кодом и кроссплатформенная платформа тестирования, которая работает со всеми поддерживаемыми целевыми объектами .NET (платформа .NET Framework, .NET Core, .NET, .NET, UWP, WinUI и т. д.), размещенными на GitHub.

Параметры запуска

Файл runettings можно использовать для настройки запуска модульных тестов. Дополнительные сведения о параметрах запуска и конфигурациях, связанных с платформой, можно найти, ознакомившись с документацией по runsettings VSTest или документацией по runsettings MSTest.

Элемент MSTest

Следующие записи запуска позволяют настроить поведение MSTest.

Настройка По умолчанию. Значения
AssemblyCleanupTimeout 0 Задайте таймаут, применяемый глобально к каждому экземпляру метода очистки сборки. [Timeout] атрибут, заданный для метода очистки сборки, переопределяет общее время ожидания.
AssemblyInitializeTimeout 0 Укажите глобальное время ожидания для применения к каждому экземпляру метода инициализации сборки. [Timeout] атрибут, указанный в методе инициализации сборки, переопределяет глобальное время ожидания.
AssemblyResolution неверно При поиске и выполнении модульных тестов можно указать пути к дополнительным сборкам. Например, эти пути можно использовать для сборок зависимостей, которые не находятся в том же каталоге, что и тестовая сборка. Чтобы указать путь, используйте элемент путь к каталогу. Пути могут содержать переменные среды.

<AssemblyResolution> <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/> </AssemblyResolution>

Эта функция применяется только при использовании целевого объекта платформа .NET Framework.
CaptureTraceOutput истинный Записывайте текстовые сообщения, поступающие из API Console.Write*, Trace.Write* и Debug.Write*, которые будут связаны с текущим запущенным тестом.
ClassCleanupLifecycle EndOfClass Если вы хотите, чтобы очистка класса произошла в конце сборки, задайте для него значение EndOfAssembly. (Больше не поддерживается начиная с MSTest версии 4, так как EndOfClass — это поведение по умолчанию и единственное поведение ClassCleanup)
ClassCleanupTimeout 0 Укажите глобальный тайм-аут, применяемый к каждому вызову метода очистки класса. [Timeout] атрибут, указанный в методе очистки класса, переопределяет глобальный тайм-аут.
ClassInitializeTimeout 0 Укажите глобальное время ожидания для применения к каждому экземпляру метода инициализации класса. [Timeout] атрибут, указанный в методе инициализации класса, переопределяет глобальное время ожидания.
Рассматриватьфикстурыкакспециальныетесты ложь Чтобы отобразить AssemblyInitialize, AssemblyCleanup, ClassInitialize, ClassCleanup как отдельные записи в Visual Studio и Visual Studio Code в журнале Test Explorer и .trx, установите для этого значение true.
УдалитьДиректориюРазвертыванияПослеЗавершенияТестовогоЗапуска истина Чтобы сохранить каталог развертывания после завершения тестового запуска, установите для этого параметра значение false.
DeploymentEnabled true Если задано значение false, элементы развертывания, указанные в методе тестирования, не копируются в каталог развертывания.
DeployTestSourceDependencies истина Значение, указывающее, должны ли быть развернуты ссылки на источники тестов.
ВключитьМетодыТестированияБазовогоКлассаИзДругихСборок true Значение, указывающее, следует ли включить обнаружение методов тестирования из базовых классов в другой сборке, отличной от наследующего тестового класса.
ForcedLegacyMode ложь В более ранних версиях Visual Studio адаптер MSTest оптимизирован для ускорения и повышения масштабируемости. Некоторое поведение, в частности порядок, в котором выполняются тесты, может немного отличаться от поведения в предыдущих выпусках Visual Studio. Задайте значение true , чтобы использовать старый адаптер теста.

Например, этот параметр можно использовать при наличии файла app.config, указанного для модульного теста.

Рекомендуется рассмотреть возможность рефакторинга тестов для включения возможности использования более нового адаптера.
MapInconclusiveToFailed ложь Если тест завершается с неопределенным состоянием, он сопоставляется с пропущенным состоянием в Обозревателе тестов. Если требуется, чтобы тесты с неопределенным результатом отображались как завершившиеся неудачно, установите для этого параметра значение true.
MapNotRunnableToFailed верно Значение, показывающее, ассоциируется ли нерезультативный результат с неудачным тестом.
УпорядочитьТестыПоИмениВКлассе ложь Если вы хотите выполнить тесты по именам тестов как в обозревателях тестов, так и в командной строке, задайте для этого значения значение true.
Распараллелить Используется для задания параметров параллелизации:

Рабочие роли: количество потоков или рабочих ролей, используемых для параллелизации, которое по умолчанию является числом процессоров на текущем компьютере.

ОБЛАСТЬ: область параллелизации. Его можно задать в MethodLevel. По умолчанию это ClassLevel.

<Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize>
ФайлНастроек Здесь можно задать файл параметров тестирования для использования с адаптером MSTest. Также можно указать файл настроек теста из меню параметров.

Если задано это значение, необходимо также задать для параметра ForcedlegacyMode значение true.

<ForcedLegacyMode>true</ForcedLegacyMode>
TestCleanupTimeout 0 Укажите глобально время ожидания для применения к каждому экземпляру метода очистки теста. [Timeout] атрибут, указанный для метода очистки теста, переопределяет глобальное время ожидания.
TestInitializeTimeout 0 Укажите глобально время ожидания для применения к каждому экземпляру метода инициализации теста. [Timeout] атрибут, указанный в методе инициализации теста, переопределяет глобальное время ожидания.
TestTimeout 0 Возвращает указанное время ожидания тестового случая глобального уровня.
ОбработкаПредупрежденийОчисткиКлассаИСборкиКакОшибок ложь Чтобы рассматривать недочеты при очистке класса как ошибки, установите для этого параметра значение true.
TreatDiscoveryWarningsAsErrors ложь Чтобы сообщить о предупреждениях об обнаружении тестов как об ошибках, задайте для этого значение true.

TestRunParameter - элемент

<TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
</TestRunParameters>

Параметры тестового запуска предоставляют способ определения переменных и значений, доступных для тестов во время выполнения. Доступ к параметрам с помощью свойства MSTest TestContext.Properties :

private string _appUrl;
public TestContext TestContext { get; set; }

[TestMethod]
public void HomePageTest()
{
    string _appUrl = TestContext.Properties["webAppUrl"];
}

Чтобы использовать параметры тестового запуска, добавьте в тестовый класс общедоступное свойство TestContext.

Пример файла .runsettings

Следующий XML-код представляет содержимое обычного файла .runsettings. Скопируйте этот код и измените его в соответствии с требованиями.

Каждый элемент этого файла необязателен, так как все они имеют значения по умолчанию.

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>

  <!-- Parameters used by tests at run time -->
  <TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
    <Parameter name="webAppUserName" value="Admin" />
    <Parameter name="webAppPassword" value="Password" />
  </TestRunParameters>

  <!-- MSTest -->
  <MSTest>
    <MapInconclusiveToFailed>True</MapInconclusiveToFailed>
    <CaptureTraceOutput>false</CaptureTraceOutput>
    <DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
    <DeploymentEnabled>False</DeploymentEnabled>
    <ConsiderFixturesAsSpecialTests>False</ConsiderFixturesAsSpecialTests>
    <AssemblyResolution>
      <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/>
    </AssemblyResolution>
  </MSTest>

</RunSettings>

testconfig.json

При выполнении тестов с помощью MSTest можно использовать файл testconfig.json для настройки поведения средства запуска тестов. Файл testconfig.json — это JSON-файл, содержащий настройки конфигурации для средства выполнения тестов. Файл используется для настройки тестового запуска и среды выполнения. Для получения дополнительной информации см. документацию по Microsoft.Testing.Platform testconfig.json.

Начиная с MSTest 3.7, можно также настроить запуск MSTest в том же файле конфигурации. В следующих разделах описаны параметры, которые можно использовать в файле testconfig.json.

Элемент MSTest

Параметры MSTest группируются по функциям, описанным в следующих разделах.

Вход По умолчанию. Описание
Упорядочить тесты по имени в классе ложь Если вы хотите выполнить тесты по именам тестов как в обозревателях тестов, так и в командной строке, задайте для этого значения значение true.
включитьМетодыТестированияБазовогоКлассаИзДругихСборок правда Значение, указывающее, следует ли включить обнаружение методов тестирования из базовых классов в другой сборке, отличной от наследующего тестового класса.
classCleanupLifecycle Конец сборки Если вы хотите, чтобы очистка класса произошла в конце класса, задайте для него значение EndOfClass.

ПараметрыassemblyResolution

Все параметры в этом разделе относятся к элементу assemblyResolution.

Вход По умолчанию. Описание
Пути Нет При поиске и выполнении модульных тестов можно указать пути к дополнительным сборкам. Например, эти пути можно использовать для сборок зависимостей, которые не находятся в том же каталоге, что и тестовая сборка. Можно указать путь в фигуре { "path": "...", "includeSubDirectories": "true/false" }.

Пример:

{
  "mstest": {
    "assemblyResolution": {
        { "path": "...", "includeSubDirectories": "true/false" }
    }
  }
}

Параметрыdeployment

Все параметры в этом разделе относятся к элементу deployment.

Вход По умолчанию. Описание
удалитьДиректориюРазвертыванияПослеЗавершенияТестовогоЗапуска истина Чтобы сохранить каталог развертывания после завершения тестового запуска, установите для этого параметра значение false.
deployTestSourceDependencies истинный Указывает, следует ли развертывать ссылки на тестовые исходники.
Включен true Если задано значение false, элементы развертывания, указанные в методе тестирования, не копируются в каталог развертывания.

Пример:

{
  "mstest": {
    "deployment": {
        "deleteDeploymentDirectoryAfterTestRunIsComplete": true,
        "deployTestSourceDependencies": true,
        "enabled": true
    }
  }
}

Параметрыoutput

Все параметры в этом разделе относятся к элементу output.

Вход По умолчанию. Описание
captureTrace истинный Фиксация текстовых сообщений, поступающих из API Console.Write*, Trace.Write* и Debug.Write*, которые будут связаны с текущим запущенным тестом.

Пример:

{
  "mstest": {
    "output": {
        "captureTrace": false
    }
  }
}

Параметрыparallelism

Все параметры в этом разделе относятся к элементу parallelism.

Вход По умолчанию. Описание
Включен ложь Включите параллелизацию тестов.
размах класс Область параллелизации. Можно установить на method. Значение по умолчанию classсоответствует выполнению всех тестов заданного класса последовательно, но нескольких классов параллельно.
Работники 0 Количество потоков и работников, используемых для параллелизации. Значение по умолчанию сопоставляется с количеством процессоров на текущем компьютере.

Пример:

{
  "mstest": {
    "parallelism": {
        "enabled": true,
        "scope": "method",
        "workers": 32
    }
  }
}

Параметрыexecution

Все параметры в этом разделе относятся к элементу execution.

Вход По умолчанию. Описание
считатьДанныеИзПустогоИсточникаНеопределёнными ложный Если задано значение true, пустой источник данных считается неуклюзивным.
рассматриватьФикстурыКакОсобыеТесты неправда Чтобы отобразить AssemblyInitialize, AssemblyCleanup, ClassInitialize, ClassCleanup как отдельные записи в Visual Studio и Visual Studio Code, а также в журнале файлов Test Explorer и .trx, установите для этого параметра значение true.
сопоставитьНеопределенныеСоНеобходимыми ложное Если тест завершается с неопределённым состоянием, он сопоставляется с пропущенным состоянием в Test Explorer. Если требуется, чтобы тесты с неопределенным результатом отображались как завершившиеся неудачно, установите для этого параметра значение true.
ОтобразитьНеИсполняемоеНаНеудавшееся истина Значение, указывающее, сопоставляется ли результат, который нельзя выполнить, с провальным тестом.
обрабатыватьПредупрежденияОчисткиКлассаИСборкиКакОшибки неправда Чтобы видеть ваши ошибки в очистке класса как ошибки, установите это значение как true.
рассматриватьПредупрежденияОбнаруженияКакОшибки ложь Чтобы сообщить о предупреждениях об обнаружении тестов как об ошибках, установите его значение как true.

Пример:

{
  "mstest": {
    "execution": {
        "considerEmptyDataSourceAsInconclusive": false,
        "considerFixturesAsSpecialTests": false,
        "mapInconclusiveToFailed": true,
        "mapNotRunnableToFailed": true,
        "treatClassAndAssemblyCleanupWarningsAsErrors": false,
        "treatDiscoveryWarningsAsErrors": false
    }
  }
}

Параметрыtimeout

Все параметры в этом разделе относятся к элементу timeout.

Вход По умолчанию. Описание
Очистка сборки 0 Глобально укажите тайм-аут, применяемый к каждому экземпляру метода очистки сборки.
инициализация сборки 0 Укажите глобальный тайм-аут, применяемый к каждому экземпляру метода инициализации сборки.
classCleanup 0 Укажите глобальное время ожидания, применяемое к каждому экземпляру метода очистки класса.
classInitialize 0 Укажите глобальное время ожидания для применения к каждому экземпляру метода инициализации класса.
тест 0 Укажите глобально время ожидания теста.
testCleanup 0 Установите время ожидания на уровне всей системы для применения к каждому экземпляру метода очистки после теста.
инициализация теста 0 Укажите глобально время ожидания для применения к каждому экземпляру метода инициализации теста.
использоватьСогласованноеОтмена ложь Если установлено значение true, и произойдет тайм-аут, MSTest инициирует отмену CancellationToken, но не прекратит наблюдение за методом. Это поведение более эффективно, но зависит от пользователя, который должен корректно проводить токен по всем маршрутам.

Заметка

Атрибут [Timeout], указанный в методе, переопределяет глобальное время ожидания. Например, значение [Timeout(1000)] для метода, помеченного [AssemblyCleanup], переопределит глобальный тайм-аут assemblyCleanup.

Пример:

{
  "mstest": {
    "timeout": {
        "assemblyCleanup": 0,
        "assemblyInitialize": 0,
        "classCleanup": 0,
        "classInitialize": 0,
        "test": 0,
        "testCleanup": 0,
        "testInitialize": 0,
        "useCooperativeCancellation": false
    }
  }
}

Пример файла testconfig.json

В следующем формате JSON показано содержимое типичного файла .testconfig.json. Скопируйте этот код и измените его в соответствии с требованиями.

Каждый элемент этого файла необязателен, так как все они имеют значения по умолчанию.

{
  "platformOptions": {
  },
  "mstest": {
    "execution": {
        "mapInconclusiveToFailed" : true,
        "disableAppDomain": true,
        "considerFixturesAsSpecialTests" : false,
    },
    "parallelism" : {
        "enabled": true,
        "scope": "method",
    },
    "output": {
        "captureTrace": false
    }
  }
}