Настройка 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
}
}
}