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


Настройка 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 Конец занятия Если вы хотите, чтобы очистка класса произошла в конце сборки, задайте для него значение 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 истинный Если задано значение false, элементы развертывания, указанные в методе тестирования, не копируются в каталог развертывания.
DeployTestSourceDependencies истинный Значение, указывающее, должны ли быть развернуты ссылки на источники тестов.
ВключитьМетодыТестированияБазовогоКлассаИзДругихСборок истинный Значение, указывающее, следует ли включить обнаружение методов тестирования из базовых классов в другой сборке, отличной от наследующего тестового класса.
ПринудительныйРежимНаследия неверно В более ранних версиях Visual Studio адаптер MSTest оптимизирован для ускорения и повышения масштабируемости. Некоторое поведение, в частности порядок, в котором выполняются тесты, может немного отличаться от поведения в предыдущих выпусках Visual Studio. Задайте значение true , чтобы использовать старый адаптер теста.

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

Рекомендуется рассмотреть возможность рефакторинга тестов для включения возможности использования более нового адаптера.
ОтобразитьНеопределенныеКакНеудачные неверно Если тест завершается с неопределенным состоянием, он сопоставляется с пропущенным состоянием в Обозревателе тестов. Если требуется, чтобы тесты с неопределенным результатом отображались как завершившиеся неудачно, установите для этого параметра значение true.
ОтметитьНеЗапускаемоеКакПровалившееся истинный Значение, показывающее, ассоциируется ли нерезультативный результат с неудачным тестом.
УпорядочитьТестыПоИмениВКлассе неверно Если вы хотите выполнить тесты по именам тестов как в обозревателях тестов, так и в командной строке, задайте для этого значения значение 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 истинный Указывает, следует ли развертывать ссылки на тестовые исходники.
Включен истинный Если задано значение 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.
сопоставитьНеопределенныеСоНеобходимыми неверно Если тест завершается с неопределенным состоянием, он сопоставляется с пропущенным состоянием в Обозревателе тестов. Если требуется, чтобы тесты с неопределенным результатом отображались как завершившиеся неудачно, установите для этого параметра значение 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
    }
  }
}