Настройка 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 | Чтобы отобразить AssemblyInitialize AssemblyCleanup , ClassInitialize ClassCleanup как отдельные записи в 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
Начиная с 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
}
}
}