Бөлісу құралы:


Анализ кода MSTest

Правила анализа 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.

Заметка

Правила, включенные по умолчанию в качестве предупреждений, являются нарушениями, которые, как ожидается, вызывают проблемы во время выполнения.

Это режим, который, как ожидается, будет использоваться большинство разработчиков. Правила, включенные по умолчанию с помощью сведений (suggestion) серьезности, переключаются на предупреждения. Следующие правила повышаются до уровня ошибок как в режиме Recommended, так и в режиме All.

All

Этот режим более агрессивный, чем Recommended. Все правила включены в виде предупреждений. Кроме того, следующие правила перерастаются в ошибки:

Правила по категориям

Правила анализатора организованы по следующим категориям:

Правила проектирования

Принципы проектирования помогают создавать и поддерживать наборы тестов, которые соответствуют хорошему проектированию и передовым практикам.

Правила производительности

правила производительности поддерживают высокопроизводительные тесты.

Правила подавления

правила подавления поддерживают подавление диагностических сообщений из других правил.

Правила использования

Правила использования поддерживают правильное использование 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