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


Настройка 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 можно использовать для настройки запуска модульных тестов. Дополнительные сведения о запусках и конфигурациях, связанных с платформой, см . в документации по runettings VSTest или документации по runettings MSTest runettings.

Элемент MSTest

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

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

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

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

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

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

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

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

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

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

<ForcedLegacyMode>true</ForcedLegacyMode>
TestCleanupTimeout 0 Укажите глобально время ожидания для применения к каждому экземпляру метода очистки теста. [Timeout] атрибут, указанный в методе очистки теста, переопределяет глобальное время ожидания.
TestInitializeTimeout 0 Укажите глобально время ожидания для применения к каждому экземпляру метода инициализации теста. [Timeout] атрибут, указанный в методе инициализации теста, переопределяет глобальное время ожидания.
TestTimeout 0 Возвращает указанное время ожидания глобального тестового случая.
TreatClassAndAssemblyCleanupWarningsAsErrors false Чтобы увидеть ошибки в очистке класса в виде ошибок, задайте для этого значения значение true.
TreatDiscoveryWarningsAsErrors false Чтобы сообщить об предупреждениях об обнаружении тестов в виде ошибок, задайте для этого значения значение 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 группируются по функциям, описанным в следующих разделах.

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

Параметры AssemblyResolution

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

Параметры развертывания

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

Параметры вывода

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

Параметры параллелизма

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

Параметры выполнения

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

Параметры времени ожидания

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

Заметка

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

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

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

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

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