Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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 v4, так как EndOfClass — это поведение по умолчанию и единственное поведение ClassCleanup) |
ClassCleanupTimeout |
0 | Укажите глобальный тайм-аут, применяемый к каждому вызову метода очистки класса.
[Timeout] атрибут, указанный в методе очистки класса, переопределяет глобальный тайм-аут. |
ClassInitializeTimeout |
0 | Укажите глобальное время ожидания для применения к каждому экземпляру метода инициализации класса.
[Timeout] атрибут, указанный в методе инициализации класса, переопределяет глобальное время ожидания. |
ConsiderFixturesAsSpecialTests |
неверно | Чтобы отобразить AssemblyInitialize, AssemblyCleanup, ClassInitialize, ClassCleanup как отдельные записи в Visual Studio и Visual Studio Code в журнале Test Explorer и .trx, установите для этого значение true. |
DeleteDeploymentDirectoryAfterTestRunIsComplete |
истинный | Чтобы сохранить каталог развертывания после завершения тестового запуска, установите для этого параметра значение false. |
DeploymentEnabled |
истинный | Если задано значение false, элементы развертывания, указанные в методе тестирования, не копируются в каталог развертывания. |
DeployTestSourceDependencies |
истинный | Значение, указывающее, должны ли быть развернуты ссылки на источники тестов. |
EnableBaseClassTestMethodsFromOtherAssemblies |
истинный | Значение, указывающее, следует ли включить обнаружение методов тестирования из базовых классов в другой сборке, отличной от наследующего тестового класса. |
ForcedLegacyMode |
неверно | В более ранних версиях Visual Studio адаптер MSTest оптимизирован для ускорения и повышения масштабируемости. Некоторое поведение, в частности порядок, в котором выполняются тесты, может немного отличаться от поведения в предыдущих выпусках Visual Studio. Задайте значение true , чтобы использовать старый адаптер теста. Например, этот параметр можно использовать при наличии файла app.config, указанного для модульного теста. Рекомендуется рассмотреть возможность рефакторинга тестов для включения возможности использования более нового адаптера. |
LaunchDebuggerOnTestFailure |
неверно | Начиная с MSTest 4.2, если задано значение true, MSTest запускает отладчик при сбое теста. |
MapInconclusiveToFailed |
неверно | Если тест завершается с неопределенным состоянием, он сопоставляется с пропущенным состоянием в Обозревателе тестов. Если требуется, чтобы тесты с неопределенным результатом отображались как завершившиеся неудачно, установите для этого параметра значение true. |
MapNotRunnableToFailed |
истинный | Значение, показывающее, ассоциируется ли нерезультативный результат с неудачным тестом. |
OrderTestsByNameInClass |
неверно | Если вы хотите выполнить тесты по именам тестов как в обозревателях тестов, так и в командной строке, задайте для этого значения значение true. |
Parallelize |
Используется для задания параметров параллелизации:Workers: количество потоков или рабочих ролей, используемых для параллелизации, которое по умолчанию является числом процессоров на текущем компьютере.Scope: область параллелизации. Можно установить на MethodLevel. По умолчанию, это ClassLevel.<Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize> |
|
RandomizeTestOrder |
неверно | Начиная с MSTest 4.3, задайте для этого параметра значение true, чтобы выполнять тесты в случайном порядке, что помогает выявить скрытые зависимости между тестами, связанные с их порядком выполнения. Этот параметр не может быть объединён с OrderTestsByNameInClass. |
RandomTestOrderSeed |
Начиная с MSTest 4.3, если RandomizeTestOrder имеет значение true, задайте целочисленное начальное число, чтобы случайный порядок можно было воспроизводить при разных запусках. Если не задано, для каждого запуска используется новое зерно. |
|
SettingsFile |
Здесь можно задать файл параметров тестирования для использования с адаптером MSTest. Также можно указать файл настроек теста из меню параметров. Если указать это значение, необходимо также задать ForcedLegacyModeзначение true.<ForcedLegacyMode>true</ForcedLegacyMode> |
|
TestCleanupTimeout |
0 | Задайте глобально время ожидания, применяемое к каждому экземпляру метода очистки теста.
[Timeout] атрибут, указанный для метода очистки теста, переопределяет глобальное время ожидания. |
TestInitializeTimeout |
0 | Укажите глобально время ожидания для применения к каждому экземпляру метода инициализации теста.
[Timeout] атрибут, указанный в методе инициализации теста, переопределяет глобальный таймаут. |
TestTimeout |
0 | Возвращает указанное время ожидания тестового случая глобального уровня. |
TreatClassAndAssemblyCleanupWarningsAsErrors |
неверно | Чтобы рассматривать недочеты при очистке класса как ошибки, установите для этого параметра значение 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 runtime -->
<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-файл, содержащий настройки конфигурации для средства выполнения тестов. Файл используется для настройки тестового запуска и среды выполнения. Дополнительные сведения см. в документации по MTP 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. |
| launchDebuggerOnTestFailure | неверно | Начиная с MSTest 4.2, при установке trueMSTest запускает отладчик при сбое теста. |
| ОтобразитьНеИсполняемоеНаНеудавшееся | истинный | Значение, показывающее, ассоциируется ли нерезультативный результат с неудачным тестом. |
| randomizeTestOrder | неверно | Начиная с MSTest 4.3, установите для этого параметра значение true, чтобы запускать тесты в случайном порядке, что помогает выявить скрытые зависимости между тестами от порядка их выполнения. Этот параметр не может быть объединён с orderTestsByNameInClass. |
| randomTestOrderSeed | Начиная с MSTest 4.3, если для randomizeTestOrder задано значение true, укажите целочисленное значение seed, чтобы обеспечить воспроизводимость случайного порядка в разных запусках. Если значение не задано, для каждого запуска используется новое зерно. |
|
| обрабатыватьПредупрежденияОчисткиКлассаИСборкиКакОшибки | неверно | Чтобы рассматривать недочеты при очистке класса как ошибки, установите для этого параметра значение 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": {
"resultDirectory": "./TestResults"
},
"mstest": {
"execution": {
"mapInconclusiveToFailed": true,
"disableAppDomain": true,
"considerFixturesAsSpecialTests": false
},
"parallelism": {
"enabled": true,
"scope": "method"
},
"output": {
"captureTrace": false
}
}
}
свойства MSBuild
Начиная с MSTest 4.3, можно включить параллелизацию на уровне сборки в файле проекта или Directory.Build.props без добавления атрибута [assembly: Parallelize]. Эти свойства выдают соответствующий атрибут сборки во время сборки, поэтому они должны GenerateAssemblyInfo быть true (по умолчанию для проектов в стиле SDK).
| Property | По умолчанию. | Описание |
|---|---|---|
MSTestParallelizeScope |
Область параллелизации. Установите значение MethodLevel или ClassLevel, чтобы выводить [assembly: Parallelize(Scope = ExecutionScope.MethodLevel)] (или ExecutionScope.ClassLevel), либо значение None, чтобы выводить [assembly: DoNotParallelize]. |
|
MSTestParallelizeWorkers |
Максимальное количество рабочих потоков, выводимое как значение Workers в [assembly: Parallelize]. Значение 0 сопоставляется с количеством процессоров на текущем компьютере. Это свойство нельзя задать, когда MSTestParallelizeScope имеет значение None. |
Следующий пример включает параллелизацию на уровне методов с четырьмя рабочими процессами для каждого тестового проекта, импортирующего файл Directory.Build.props:
<Project>
<PropertyGroup>
<MSTestParallelizeScope>MethodLevel</MSTestParallelizeScope>
<MSTestParallelizeWorkers>4</MSTestParallelizeWorkers>
</PropertyGroup>
</Project>