Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Это руководство помогает пользователям обновлять свои проекты MSTest с MSTest версии 1 до MSTest версии 3. MSTest версии 3 представляет значительные новые функции, оптимизации и некоторые критические изменения для повышения надежности тестирования, скорости выполнения и совместимости с современными платформами .NET.
На кого это повлияет?
Это руководство предназначено для проектов, которые в настоящее время являются проектами .NET Framework и используют MSTest версии 1 через:
-
Ссылки на сборки: проекты, ссылающиеся
Microsoft.VisualStudio.QualityTools.UnitTestFramework.dllнепосредственно. -
Пакеты NuGet: проекты, использующие
MSTest.TestFrameworkпакет NuGet версии 1.0.0-1.4.0.
Если проект использует MSTest для модульного тестирования и содержит приведенные выше ссылки, он будет использовать улучшения в MSTest версии 3 и требует корректировки, описанные в этом руководстве.
Почему переход на MSTest v3?
Даже если вы удовлетворены текущей настройкой MSTest, обновление до MSTest версии 3 разблокирует существенные преимущества, которые повышают качество и готовность к будущим тестам. Вот почему переход теперь может быть ценным шагом вперед:
Улучшенная безопасность: MSTest версии 1 имеет известные уязвимости безопасности. С помощью MSTest версии 3 мы реализовали обширные улучшения безопасности для защиты среды тестирования.
Немедленное повышение производительности: MSTest версии 3 значительно сокращает время выполнения теста и оптимизирует использование ресурсов. Это особенно полезно в конвейерах CI/CD, где быстрые тесты могут сократить циклы развертывания и сократить затраты на инфраструктуру.
Обеспечение будущей актуальности тестов: MSTest v3 предоставляет надежную поддержку современных версий .NET, включая .NET 8, и будущих итераций, а также кроссплатформенную совместимость. Это означает, что тесты будут более адаптируемыми и готовыми к обновлению, избегая технического долга устаревших платформ тестирования.
Повышенная надежность кода с помощью новых анализаторов: встроенные анализаторы кода MSTest версии 3 применяют рекомендации, помогая перехватывать проблемы раньше и повышать уровень более чистого, более поддерживаемого тестового кода:
Упреждающее обнаружение проблем: анализаторы предоставляют отзывы в режиме реального времени, предлагая улучшения и пометки потенциальных проблем при написании тестов.
Более надежные безопасные для типов утверждения: MSTest версии 3 заменяет неоднозначные перегрузки и использует утверждения с обеспечением безопасности типов, уменьшая риск неправильного поведения теста и делая тесты более надежными.
Более чистый код, меньше обслуживания: выравнивая тесты со стандартами MSTest и рекомендациями, MSTest версии 3 помогает поддерживать более чистую, более управляемую базу кода, уменьшая технический долг с течением времени.
Большую гибкость и расширяемость: MSTest версии 3 поддерживает расширенные сценарии тестирования, включая динамические источники данных и параллельное выполнение в сборке. Эта гибкость обеспечивает более сложные подходы к тестированию и ускоряет наборы тестов без сложных конфигураций.
При обновлении вы настраиваете тесты на более быстрые, надежные и адаптируемые к будущим разработкам .NET, обеспечивая его долгосрочный успех и облегчая поддержание.
Подсказка
После миграции в MSTest версии 3 рассмотрите возможность дальнейшего шага и миграции в MSTest версии 4. Дополнительные сведения см. в статье "Миграция из MSTest версии 3 в версию 4".
Шаги миграции
Удалите ссылку на сборку
Для проектов, использующих MSTest версии 1 с помощью ссылок на сборки, существует ссылка на следующую библиотеку DLL:
Microsoft.VisualStudio.QualityTools.UnitTestFramework
В проектах стилей, отличных от пакета SDK, эти ссылки часто добавляются через Visual Studio, а не путем непосредственного редактирования XML. Чтобы удалить эти ссылки с помощью графического интерфейса Visual Studio, выполните указанные ниже действия.
Откройте Обозреватель решений в Visual Studio.
Разверните узел проекта, используя MSTest.
Найдите папку "Ссылки" в проекте.
В папке "Ссылки" найдите и выберите ссылки на библиотеку DLL MSTest,
Microsoft.VisualStudio.QualityTools.UnitTestFrameworkЩелкните правой кнопкой мыши выбранные ссылки и выберите пункт "Удалить " в контекстном меню.
Сохраните проект для применения изменений.
2. Обновление проекта
Проект можно обновить до MSTest версии 3 одним из двух способов:
Обновление пакетов: если у вас есть ссылки на пакеты NuGet на MSTest.TestFramework и MSTest.TestAdapter, обновите их с помощью диспетчера пакетов NuGet в Visual Studio или выполнив следующую команду в консоли диспетчера пакетов NuGet:
Update-Package MSTest.TestFramework -Version 3.11.1 Update-Package MSTest.TestAdapter -Version 3.11.1Или установите пакет MSTest: установите последний пакет MSTest с помощью диспетчер пакетов NuGet в Visual Studio или выполните следующую команду в консоли NuGet диспетчер пакетов:
Install-Package MSTest -Version 3.11.1Или обновите файл проекта напрямую (для проектов в стиле SDK): обновите
.csprojфайл, чтобы указать версию пакета SDK MSTest.<Project Sdk="MSTest.Sdk/3.11.1"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> </PropertyGroup> </Project>
Выберите вариант, подходящий для настройки проекта. Оба метода гарантируют обновление проекта для использования MSTest версии 3.
3. Обновление кода
Assert.AreEqual/AreNotEqual или Assert.AreSame/AreNotSame (с объектом) Если одно из этих утверждений вызывает ошибки, рекомендуется проверить совместимость типов. Если это так, попробуйте добавить явную параметризацию типов, чтобы устранить проблему.
использование универсальных шаблонов:
Assert.AreEqual<customObject>(expectedObject, actualObject); Assert.AreNotEqual<customObject>(expectedObject, actualObject);.
Очистка. Используйте
TestCleanupметоды или шаблон для очисткиDispose.RunSettings:
.testsettingsфайл больше не поддерживается, то есть<LegacySettings>он также недоступен. Используйте .runsettings для конфигурации теста.
Новые возможности в MSTest версии 3
- Улучшенные значения по умолчанию для тестовых проектов
- Упрощенная настройка и использование
- Расширенные возможности расширяемости программы тестирования MSTest
- Новые анализаторы кода на основе Roslyn для улучшения разработки тестов
- Поддержка приложений WinUI
- Параллельное выполнение в рамках сборки
- Динамические источники данных для тестов на основе данных
Устаревшие функции
- Удалена поддержка:
- платформа .NET Framework 4.5 (используйте .NET 4.6.2 или более поздней версии)
- .NET Standard 1.0 (используйте .NET Standard 2.0)
- Версии UWP до 16299
- Версии WinUI до 18362
- .NET 5 (используйте .NET Core 3.1 или .NET 6)
Критические изменения и удаленные API
Перегрузки утверждений
Если AreEqual, AreNotEqual, AreSame или AreNotSame вызывают ошибки, рекомендуется проверить совместимость типов. Если это так, попробуйте добавить явную параметризацию типов, чтобы устранить проблему.
DataRowAttribute Обновления
Конструкторы DataRowAttribute в MSTest версии 3 были упрощены для применения сопоставления типов для параметров. Это означает, что необходимо указать значения в DataRow, которые точно соответствуют типам параметров метода.
Пример:
[TestMethod]
[DataRow(1, "test")] // Correct: matches parameter types (int, string)
public void MyTestMethod(int number, string text) { ... }
В случаях, когда типы не соответствуют точно, MSTest версии 3 теперь вызывает ошибку, а не пытается преобразовать.
Параметры времени ожидания.
В MSTest версии 3 обработка стандартных настроек Timeout унифицирована для обеспечения согласованного поведения в разных средах .NET. Это изменение может повлиять на тесты, использующие определенные значения времени ожидания, особенно если эти тесты асинхронны или выполняются в разных платформах.
- В MSTest версии 1 или версии 2 некоторые параметры времени ожидания могут интерпретироваться по-разному в зависимости от платформы (например, .NET Framework и .NET Core).
- MSTest версии 3 применяет согласованное поведение времени ожидания, что может означать, что тесты, настроенные с тайм-аутами в предыдущих версиях, могут завершиться ошибкой или вести себя по-разному, если значения времени ожидания слишком коротки в соответствии с новым стандартом.
Что значит:
Тесты со временем ожидания могут потребовать корректировки. Если тесты имеют
Timeoutатрибут с определенными длительностью, убедитесь, что эти значения по-прежнему позволяют тесту выполняться в MSTest версии 3. Тесты, прошедшие ранее с определенным временем ожидания, могут потребовать более высокого или более низкого значения времени ожидания для правильной работы в соответствии с новыми правилами.Единая обработка времени ожидания: обработка единого времени ожидания MSTest версии 3 делает время ожидания более предсказуемым, но требует проверки и потенциально обновления
Timeoutзначений в старых тестах.
Пример:
// Old (v1/v2) - Timeout was sometimes interpreted inconsistently
[TestMethod]
[Timeout(2000)] // Timeout in milliseconds
public void TestMethod() { ... }
// New (v3) - Unified handling of timeout
[TestMethod]
[Timeout(2000)] // Verify this value still works under MSTest v3
public async Task TestMethod() { ... }
Изменения конфигурации
Убедитесь, что .runsettings файлы соответствуют синтаксису и структуре MSTest версии 3.
Параллельная оптимизация выполнения и производительности
Настройте параллельное выполнение в .runsettings для повышения производительности.
Пример:
<RunSettings>
<RunConfiguration>
<MaxCpuCount>-1</MaxCpuCount> <!-- Uses all available processors -->
</RunConfiguration>
</RunSettings>
Улучшенное использование ресурсов
MSTest версии 3 оптимизирует управление ресурсами, что приводит к снижению потребления памяти и повышению эффективности ЦП.
Обработка устаревших атрибутов и перенос пользовательских расширений
Просмотрите устаревшие атрибуты и замените их альтернативами MSTest версии 3 по возможности.
Анализаторы кода и рекомендации
MSTest версии 3 включает встроенные анализаторы кода для лучших практик, избежания ошибок конфигурации и правильного использования атрибутов и настроек MSTest. Это автоматически доступно при использовании пакета MSTest или MSTest.Sdk, а начиная с MSTest 3.7, MSTest.Analyzers является транзитивной зависимостью MSTest.TestFramework.