Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Правила анализа MSTest ("MSTESTxxxx") проверяют код C# или Visual Basic для обеспечения безопасности, производительности, проектирования и других проблем.
Совет
В Visual Studio многие правила анализатора связаны с исправлениями кода, которые можно применить для устранения проблемы. Исправления кода показаны в меню со значком лампочки.
Правила организованы по категориям, таким как использование производительности...
Начиная с MSTest.TestFramework 3.7, пакет NuGet MSTest.Analyzers является зависимостью фреймворка. Для более ранних версий необходимо использовать метапакет MSTest или добавить ссылку на пакет для MSTest.Analyzers явно.
MSTestAnalysisMode
Начиная с MSTest 3.8, свойство MSBuild с именем MSTestAnalysisMode доступно для определения того, какие анализаторы включены при какой серьезности.
Совет
Чтобы узнать, какие правила включены для каждого режима серьезности, можно перейти к пакету интересующей версии кэша NuGet, найти каталог globalconfigs и открыть файл .globalconfig, соответствующий режиму анализа.
Дополнительные сведения о поиске каталога кэша NuGet см. в статье Управление глобальными пакетами, кэшем и временными папками. В этом каталоге найдите каталог mstest.analyzers, а затем версию (3.8 и более позднюю), а затем globalconfigs.
Кроме того, вы можете скачать пакет NuGet интересующей версии из nuget.org и просмотреть его в обозревателе пакетов NuGet (приложение Windows) или просмотреть непосредственно в версии веб-приложения обозревателя пакетов NuGet.
Доступные значения для этого свойства:
None
Это значение устанавливает степень серьезности none для всех анализаторов, отключая их. Затем можно включить отдельные анализаторы с помощью .editorconfig или .globalconfig файлов.
Default
Этот параметр следует описанию по умолчанию для каждого правила.
- Правила, включенные по умолчанию, будут использовать уровень серьезности по умолчанию.
- Правила, отключенные по умолчанию, будут использовать уровень важности
none.
Заметка
Правила, включенные по умолчанию в качестве предупреждений, являются нарушениями, которые, как ожидается, вызывают проблемы во время выполнения.
Recommended
Это режим, который, как ожидается, будет использоваться большинство разработчиков. Правила, включенные по умолчанию с помощью сведений (suggestion) серьезности, переключаются на предупреждения. Следующие правила повышаются до уровня ошибок как в режиме Recommended, так и в режиме All.
- MSTEST0003. Методы тестирования должны иметь допустимую структуру
- MSTEST0043. Используйте атрибут повторных попыток в методе тестирования.
All
Этот режим более агрессивный, чем Recommended. Все правила включены в виде предупреждений. Кроме того, следующие правила перерастаются в ошибки:
- MSTEST0003. Методы тестирования должны иметь допустимую структуру
- MSTEST0043. Используйте атрибут повторных попыток в методе тестирования.
Заметка
Следующие правила являются полностью добровольными и не включены в режимах Default, Recommendedили All:
- MSTEST0015. Метод тестирования не должен игнорироваться
- MSTEST0019. Рекомендуется использовать методы TestInitialize вместо конструкторов
- MSTEST0020. Предпочитайте конструкторы вместо методов TestInitialize
- MSTEST0021. Предпочитайте использовать Dispose вместо методов TestCleanup
- MSTEST0022: предпочитать использовать TestCleanup вместо методов Dispose
Правила по категориям
Правила анализатора организованы по следующим категориям:
Правила проектирования
Принципы проектирования помогают создавать и поддерживать наборы тестов, которые соответствуют хорошему проектированию и передовым практикам.
Правила производительности
правила производительности поддерживают высокопроизводительные тесты.
Правила подавления
правила подавления поддерживают подавление диагностических сообщений из других правил.
Правила использования
Правила использования поддерживают правильное использование MSTest.
Правила по концепциям
Поиск правил, упорядоченных по общим сценариям тестирования и понятиям:
Тестовая структура и атрибуты
Правила, которые помогают обеспечить правильно структурированные и декорированные классы и методы тестирования:
- MSTEST0002 - Тестовый класс должен быть валидным
- MSTEST0003 . Метод тестирования должен быть допустимым
- MSTEST0004 — общедоступные типы должны быть тестовыми классами
- MSTEST0007 . Использование атрибута в методе тестирования
- MSTEST0016 . Класс тестирования должен иметь метод тестирования
- MSTEST0029 — общедоступный метод должен быть методом тестирования
- MSTEST0030 . Тип, содержащий метод теста, должен быть классом тестирования
- MSTEST0036 . Не используйте тень
- MSTEST0041 - Используйте атрибуты, основанные на условиях, с тестовым классом
- MSTEST0044 — предпочитать TestMethod вместо DataTestMethod
- MSTEST0056 - TestMethodAttribute должен правильно задать DisplayName
- MSTEST0057 . TestMethodAttribute должен распространять исходные сведения
- MSTEST0060 — дублирующийся атрибут TestMethod
- MSTEST0063 . Класс тестирования должен иметь допустимый конструктор
Связанная документация. Написание тестов с помощью MSTest
Асинхронные и ожидаемые шаблоны
Правила для правильного написания асинхронного кода теста:
- MSTEST0013 — AssemblyCleanup должно быть допустимым (включает асинхронные правила)
- MSTEST0027 - Подавить асинхронный суффикс для методов тестирования
- MSTEST0028 - Уберите асинхронный суффикс для методов тестовой среды
- MSTEST0039 — используйте более новые методы Assert.Throws (асинхронные варианты)
- MSTEST0040 . Избегайте использования утверждений в контексте async void
- MSTEST0045 - Используйте кооперативное завершение для управления временем ожидания
- MSTEST0049 — Flow TestContext CancellationToken
- MSTEST0054 . Использование свойства CancellationToken
Связанная документация: TestContext
Тестирование на основе данных
Правила для работы с сценариями тестирования на основе данных:
- MSTEST0007 . Использование атрибута в методе тестирования
- MSTEST0014 — DataRow должен быть валидным
- MSTEST0018 — DynamicData должен быть допустимым
- MSTEST0042 — повторяющаяся строка данных
- MSTEST0052 - Избегайте явного DynamicDataSourceType
- MSTEST0062 - Избегайте параметров "out/ref" в тестовом методе
Связанная документация: тестирование на основе данных
Жизненный цикл и инициализация
Правила инициализации тестирования, очистки и управления жизненным циклом:
- MSTEST0008 - TestInitialize должно быть корректным
- MSTEST0009 - TestCleanup должна быть корректной
- MSTEST0010 — ClassInitialize должен быть допустимым
- MSTEST0011 . КлассCleanup должен быть допустимым
- MSTEST0012 — AssemblyInitialize должно быть допустимо
- MSTEST0013 — AssemblyCleanup должно быть допустимым
- MSTEST0019 — предпочитать TestInitialize над конструкторами
- MSTEST0020 - Рекомендуется предпочитать конструкторы вместо TestInitialize
- MSTEST0021 — предпочитать удаление по сравнению с TestCleanup
- MSTEST0022 — предпочитать testCleanup по сравнению с Dispose
- MSTEST0034 - Используйте ClassCleanupBehavior.EndOfClass
- MSTEST0050 — глобальный тестовый стенд должен быть действительным
Связанная документация: жизненный цикл
Assertions
Правила использования методов утверждения правильно и эффективно:
- MSTEST0006 . Избегайте атрибута ExpectedException
- MSTEST0014 — DataRow должен быть валидным
- MSTEST0017 . Утверждения args должны быть переданы в правильном порядке
- MSTEST0023 — Не отрицайте логическое утверждение
- MSTEST0025 — предпочитайте использование Assert.Fail вместо условий, которые всегда ложные
- MSTEST0026 . Утверждения args должны избежать условного доступа
- MSTEST0032 - Проверьте условие утверждения, которое всегда истинно
- MSTEST0037 . Используйте правильные методы утверждения
- MSTEST0038 - Избегайте использования Assert.AreSame с типами значений
- MSTEST0039 - Используйте более новые методы Assert.Throws
- MSTEST0046 — используйте assert вместо StringAssert
- MSTEST0051 — Assert.Throws должен содержать одну инструкцию
- MSTEST0053 - Избегайте использования формата параметров Assert
- MSTEST0058 - Избегайте операторов assert в блоках catch
Связанная документация: утверждения
TestContext
Правила правильного использования объекта TestContext:
- MSTEST0005 — TestContext должен быть допустимым
- MSTEST0024 - Не храните статический TestContext
- MSTEST0033 - Подавление предупреждения о неинициализированной ненулевой ссылке
- MSTEST0048 — использование свойства TestContext
- MSTEST0049 — Flow TestContext CancellationToken
- MSTEST0054 . Использование свойства CancellationToken
Связанная документация: TestContext
Конфигурация теста
Правила настройки выполнения тестов, параллелизации и других параметров тестирования:
- MSTEST0001 . Использование атрибута Parallelize
- MSTEST0015 . Метод тестирования не должен игнорироваться
- MSTEST0031 . Не используйте System.ComponentModel.DescriptionAttribute
- MSTEST0035 - Использование DeploymentItem с методом тестирования или тест-классом
- MSTEST0043 . Использование атрибута повторных попыток в методе тестирования
- MSTEST0045 - Используйте кооперативное завершение для управления временем ожидания
- MSTEST0055 - Не игнорируйте возвращаемое значение метода String
- MSTEST0059 . Правильное использование атрибута Parallelize
- MSTEST0061 — используйте атрибут OSCondition вместо проверки среды выполнения
Связанная документация: настройка MSTest, выполнение тестов
Все правила (краткий справочник)
| Идентификатор правила | Категория | Название | Серьезность по умолчанию |
|---|---|---|---|
| MSTEST0001 | Performance | Использование атрибута Parallelize | Info |
| MSTEST0002 | Usage | Тестовый класс должен быть допустимым | Предупреждение |
| MSTEST0003 | Usage | Метод тестирования должен быть допустимым | Предупреждение об ошибке →* |
| MSTEST0004 | Design | Общедоступные типы должны быть тестовыми классами | Info |
| MSTEST0005 | Usage | TestContext должен быть допустимым | Предупреждение |
| MSTEST0006 | Design | Избегайте атрибута ExpectedException | Info |
| MSTEST0007 | Usage | Использование атрибута в методе тестирования | Предупреждение |
| MSTEST0008 | Usage | TestInitialize должен быть допустимым | Предупреждение |
| MSTEST0009 | Usage | TestCleanup должен быть допустимым | Предупреждение |
| MSTEST0010 | Usage | ClassInitialize должен быть допустимым | Предупреждение |
| MSTEST0011 | Usage | ClassCleanup должен быть действительным | Предупреждение |
| MSTEST0012 | Usage | AssemblyInitialize должна быть валидной | Предупреждение |
| MSTEST0013 | Usage | Сборка AssemblyCleanup должна быть допустимой | Предупреждение |
| MSTEST0014 | Usage | DataRow должен быть валидным | Предупреждение |
| MSTEST0015 | Design | Метод тестирования не следует игнорировать | Нет (по желанию) |
| MSTEST0016 | Design | Тестовый класс должен иметь метод тестирования | Info |
| MSTEST0017 | Usage | Утверждения args должны быть переданы в правильном порядке | Info |
| MSTEST0018 | Usage | DynamicData должен быть допустимым | Предупреждение |
| MSTEST0019 | Design | Предпочитать TestInitialize над конструкторами | Нет (по желанию) |
| MSTEST0020 | Design | Выбирайте конструкторы вместо TestInitialize | Нет (по желанию) |
| MSTEST0021 | Design | Предпочитать удаление по сравнению с TestCleanup | Нет (по желанию) |
| MSTEST0022 | Design | Предпочитать TestCleanup по сравнению с Dispose | Нет (по желанию) |
| MSTEST0023 | Usage | Не отрицайте булевское утверждение | Info |
| MSTEST0024 | Usage | Не храните статический TestContext | Предупреждение |
| MSTEST0025 | Design | Предпочитайте Assert.Fail, а не всегда ложные условия | Info |
| MSTEST0026 | Usage | Утверждения args должны избегать условного доступа | Info |
| MSTEST0027 | Suppression | Подавление асинхронного суффикса для методов тестирования | N/A |
| MSTEST0028 | Suppression | Удаление асинхронного суффикса для методов тестовых фикстур | N/A |
| MSTEST0029 | Design | Открытый метод должен быть методом тестирования | Info |
| MSTEST0030 | Usage | Тип, содержащий метод теста, должен быть классом теста | Предупреждение |
| MSTEST0031 | Usage | Не используйте System.ComponentModel.DescriptionAttribute | Info |
| MSTEST0032 | Usage | Проверка условия утверждения всегда истинного | Info |
| MSTEST0033 | Suppression | Подавление ссылки, не допускающей значение NULL, не инициализировано | N/A |
| MSTEST0034 | Usage | Используйте ClassCleanupBehavior.EndOfClass | Info |
| MSTEST0035 | Usage | Используйте DeploymentItem с методом тестирования или тестовым классом | Info |
| MSTEST0036 | Design | Не используйте тень | Предупреждение |
| MSTEST0037 | Usage | Использование соответствующих методов утверждения | Info |
| MSTEST0038 | Usage | Избегайте Assert.AreSame с типами значений | Info |
| MSTEST0039 | Usage | Используйте более новые методы Assert.Throws | Info |
| MSTEST0040 | Usage | Избегайте использования assert в контексте async void | Предупреждение |
| MSTEST0041 | Usage | Использование условных атрибутов с тестовым классом | Предупреждение |
| MSTEST0042 | Usage | Дубликат DataRow | Предупреждение |
| MSTEST0043 | Usage | Использование атрибута повторных попыток в методе тестирования | Предупреждение об ошибке →* |
| MSTEST0044 | Design | Предпочтение следует отдавать TestMethod вместо DataTestMethod | Info |
| MSTEST0045 | Design | Использование кооперативной отмены для таймаута | Info |
| MSTEST0046 | Usage | Используйте Assert вместо StringAssert | Info |
| MSTEST0048 | Usage | Использование свойства TestContext | Предупреждение |
| MSTEST0049 | Usage | Тестирование потока с использованием токена отмены TestContext | Info |
| MSTEST0050 | Usage | Глобальная тестовая конфигурация должна быть допустимой | Предупреждение |
| MSTEST0051 | Usage | Assert.Throws должен содержать одну инструкцию | Info |
| MSTEST0052 | Usage | Избегайте явного использования DynamicDataSourceType | Info |
| MSTEST0053 | Usage | Избегайте параметров формата assert | Info |
| MSTEST0054 | Usage | Использование свойства CancellationToken | Info |
| MSTEST0055 | Usage | Не игнорируйте возвращаемое значение метода строки | Предупреждение |
| MSTEST0056 | Usage | TestMethodAttribute должен корректно установить DisplayName | Info |
| MSTEST0057 | Usage | TestMethodAttribute должен распространять исходные сведения | Предупреждение |
| MSTEST0058 | Usage | Избегайте утверждений в блоках catch | Info |
| MSTEST0059 | Usage | Правильное использование атрибута Parallelize | Предупреждение |
| MSTEST0060 | Usage | Дублирующийся TestMethodAttribute | Предупреждение |
| MSTEST0061 | Usage | Использование атрибута OSCondition вместо проверки среды выполнения | Info |
| MSTEST0062 | Usage | Избегайте параметров метода теста out/ref | Предупреждение |
| MSTEST0063 | Usage | Тестовый класс должен иметь валидный конструктор | Предупреждение |
* Переведено в режим ошибки в Recommended и All режимах.
MSTESTEXP
Некоторые интерфейсы API MSTest аннотированы с помощью ExperimentalAttribute. Этот атрибут указывает, что API является экспериментальным и может быть удален или изменен в будущих версиях MSTest. Атрибут используется для идентификации API, которые еще не стабильны и не подходят для использования в рабочей среде.
Диагностика MSTESTEXP предупреждает о использовании экспериментального API в вашем коде. Чтобы отключить эту диагностику с помощью SuppressMessageAttribute, добавьте в проект следующий код:
using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("MSTESTEXP", "Justification")]
Кроме того, эту диагностику можно отключить с помощью директивы препроцессора, добавив в проект следующий код:
#pragma warning disable MSTESTEXP
// API that is causing the warning.
#pragma warning restore MSTESTEXP