Обзор MSTest

MSTest, Microsoft Testing Framework, является полностью поддерживаемой платформой тестирования с открытым исходным кодом и кроссплатформенной платформой для приложений .NET. Он позволяет создавать и выполнять тесты, а также предоставляет наборы тестов с интеграцией с Visual Studio и обозревателями тестов Visual Studio Code, интерфейсом командной строки .NET и многими конвейерами CI.

MSTest размещается в GitHub и работает со всеми поддерживаемыми целевыми объектами .NET.

Ключевые особенности

MSTest предоставляет комплексные возможности тестирования:

Поддерживаемые платформы

MSTest поддерживает широкий спектр платформ .NET и целевых платформ. В следующей таблице приведены общие сведения о поддержке платформы и специальных рекомендациях.

Platform Целевые платформы Поддержка потоков Специальные атрибуты Примечания.
.NET .NET 8+ Полная параллелизация Все атрибуты Рекомендуется для новых проектов
платформа .NET 4.6.2+ Полная параллелизация Все атрибуты Полная поддержка функций
UWP UAP 10, .NET 9+ с UAP Поток пользовательского интерфейса UITestMethod Используйте VSTest. Для современной .NET UWP требуется <UseUwp>true</UseUwp>; см. пример UWP
WinUI 3 .NET 8+ Поток пользовательского интерфейса UITestMethod Требуется Windows App SDK; см. статью "Тестирование приложений WinUI 3 с помощью MSTest и MTP"
Нативный AOT .NET 8+ Полная параллелизация Большинство атрибутов Ограниченный набор функций; см. пример native AOT
Браузер WebAssembly .NET 10+ пользовательский хост Однопотоковый Limited Поддержка выполнения MTP начинается с предварительной версии MSTest 4.4
WASI WebAssembly .NET 10+ настраиваемый хост Однопотоковый Limited Поддержка выполнения MTP начинается с предварительной версии MSTest 4.4

Особенности, связанные с платформой

Тестирование UWP

Тесты UWP выполняются в контейнере приложений UWP и требуют потока пользовательского интерфейса для многих операций:

[TestClass]
public class UwpTests
{
    [UITestMethod]
    public void TestUwpControl()
    {
        // Test runs on UI thread
        var button = new Button();
        Assert.IsNotNull(button);
    }
}

Используйте VSTest для классической модели UWP и современной .NET UWP, так как оба запускаются в AppContainer. Сведения о современной конфигурации UWP на .NET см. в примере BlankUwpNet9App sample.

Тестирование WinUI 3

Тесты WinUI 3 также требуют доступа к потокам пользовательского интерфейса для тестирования визуальных компонентов:

[TestClass]
public class WinUITests
{
    [UITestMethod]
    public void TestWinUIControl()
    {
        // Test runs on UI thread
        var window = new MainWindow();
        Assert.IsNotNull(window);
    }
}

Сведения о настройке непакованных или упакованных тестов WinUI 3 с полным доверием см. в статье "Тестирование приложений WinUI 3 с помощью MSTest и MTP".

Начиная с MSTest 4.4, Microsoft. Testing.Platform также поддерживает распаковку тестовых приложений WinUI. VSTest не поддерживает этот сценарий. Сведения о настройке см. в неупакованном примере WinUI.

Встроенный AOT

Нативная компиляция AOT поддерживается с некоторыми ограничениями из-за ограниченных возможностей отражения. Используйте генераторы источников, где это возможно, и протестируйте сценарии AOT с помощью примера NativeAotRunner.

Браузер и WASI WebAssembly

Предварительная версия MSTest 4.4 поддерживает пользовательские .NET 10 узлов браузера или WASI WebAssembly. Чтобы выполнить тесты из указанной сборки MSTest, вызовите AddMSTest. В хост-проекте установите для EnableMSTestRunner значение true, а для GenerateTestingPlatformEntryPointfalse. Сохраняйте соответствие версий пакетов MSTest и MTP.

В однопоточной среде выполнения WebAssembly MSTest не может принудительно прервать время ожидания теста. Ожидание отладчика не поддерживается в браузере или WASI, а браузер не поддерживает параметры запуска отладчика.

MTP может потоково передавать данные TRX и передавать артефакты тестов и файлов сеанса через виртуальную файловую систему WebAssembly хоста и канал артефактов. Публикация в Azure DevOps работает только в том случае, если хост предоставляет поддерживаемый доступ по HTTP и требуемую аутентификацию конвейера. Эти функции не предоставляют неограниченный доступ к файловой системе узла или сетевому доступу.

Описание полноценного браузерного хоста см. в примере BrowserPlayground.

Поддержка потоков STA

В сценариях взаимодействия с Windows COM MSTest предоставляет STATestClass и STATestMethod атрибуты для выполнения тестов в однопоточном пространстве. Дополнительные сведения о потоке STA, в том числе поддержку асинхронного продолжения с UseSTASynchronizationContext, см. в Threading attributes.

Исполняющие средства тестирования

MSTest поддерживает две платформы выполнения тестов:

  • Microsoft.Testing.Platform (MTP): современная рекомендуемая тестовая платформа с улучшенной производительностью и расширяемостью.
  • VSTest: исходная и стандартная тестовая платформа для .NET.

Для новых проектов рекомендуется использовать MTP с MSTest.Sdk.

Политика поддержки MSTest

Начиная с версии 3.0.0, MSTest строго следует семантике управления версиями.

Команда MSTest поддерживает только последнюю выпущенную версию и настоятельно рекомендует пользователям всегда обновлять последнюю версию, чтобы воспользоваться улучшениями и исправлениями безопасности. Предварительные версии выпусков не поддерживаются корпорацией Майкрософт, но предлагаются для общедоступного тестирования перед окончательным выпуском.

История версий

MSTest пережила значительную эволюцию в основных версиях:

  • MSTest версии 1: исходная платформа тестирования Visual Studio
  • MSTest версии 2: первый выпуск с открытым исходным кодом с кроссплатформенной поддержкой
  • MSTest v3: современная переработка с улучшенной архитектурой и функциями
  • MSTest версии 4: текущая версия с расширенными функциями

Note

MSTest 4.4 находится на этапе разработки по состоянию на август 2026 года. Функции, помеченные как представленные в MSTest 4.4, требуют предварительной сборки до выпуска версии 4.4.0.

Дополнительные сведения обо всех выпусках см. в журнале изменений MSTest.

Если вы обновляете более раннюю версию, ознакомьтесь с руководствами по миграции:

Кардинальные изменения

Команда MSTest тщательно проверяет и сводит к минимуму изменения, нарушающие совместимость. Если изменения с нарушением совместимости необходимы, команда использует объявления GitHub и метки на изменения с нарушением совместимости в задачах, чтобы заранее информировать сообщество, давая пользователям время предоставлять отзывы и выражать свои опасения перед выпуском изменений.

Дальнейшие шаги