次の方法で共有


MSTest コード分析

"MSTest 分析" ("MSTESTxxxx") ルールでは、お使いの C# または Visual Basic コードにセキュリティ、パフォーマンス、設計などの問題がないか検査が行われます。

ヒント

Visual Studio を使用する場合、多くのアナライザー ルールには、"コード修正" が関連付けられており、これを適用して問題を修正できます。 コード修正は、電球アイコン メニューに示されます。

ルールは、パフォーマンス、使用状況など、いくつかのカテゴリに分類されます。

MSTest.TestFramework 3.7 以降、MSTest.Analyzers NuGet パッケージはフレームワークの依存関係です。 以前のバージョンでは、MSTest メタパッケージを使用するか、MSTest.Analyzers のパッケージ参照を明示的に追加する必要があります。

MSTest分析モード

MSTest 3.8 以降では、MSTestAnalysisMode という名前の MSBuild プロパティを使用して、どのアナライザーがどの重大度で有効になっているかを判断できます。

ヒント

各モードでどの重大度でどのルールが有効になっているかを確認するには、NuGet キャッシュの対象バージョンのパッケージに移動し、globalconfigs ディレクトリを見つけて分析モードに対応する .globalconfig ファイルを開きます。 NuGet キャッシュ ディレクトリの検索の詳細については、「グローバル パッケージ、キャッシュ、および一時フォルダーを管理する」を参照してください。 そのディレクトリから、まず mstest.analyzers ディレクトリを見つけ、その後にバージョン (3.8 以降) を特定し、最後に globalconfigsを見つけてください。 目的のバージョンの NuGet パッケージを nuget.org からダウンロードして NuGet パッケージ エクスプローラー (Windows アプリ) で表示したり、Web アプリ バージョンの NuGet パッケージ エクスプローラーで直接表示したりすることもできます。

このプロパティで使用できる値は次のとおりです。

None

この値により、すべてのアナライザーが重大度 none に設定され、すべてのアナライザーが無効になります。 その後、.editorconfig または .globalconfig ファイルを使用して個々のアナライザーを有効にすることができます。

Default

この設定は、各ルールの既定の文書化された動作に従います。

  • 既定で有効になっているルールでは、既定の重大度が使用されます。
  • 既定で無効になっているルールでは、重大度 none が使用されます。

メモ

警告として既定で有効になっているルールは、実行時に問題が発生することが予想される違反です。

これは、ほとんどの開発者が使用する必要があるモードです。 既定で Info (suggestion) 重大度で有効になっているルールは警告に昇格されます。 次のルールは、 Recommended モードと All モードの両方でエラーにエスカレートされます。

All

このモードは Recommended よりも積極的です。 すべてのルールが警告として有効になっています。 さらに、次の規則がエラーにエスカレートされます。

カテゴリ別のルール

アナライザー ルールは、次のカテゴリに分類されます。

デザイン規則

デザイン規則は、適切な設計と優れたプラクティスに準拠したテスト スイートの作成と保守に役立ちます。

パフォーマンス規則

パフォーマンス規則は高パフォーマンス テストをサポートします。

抑制規則

抑制規則は、他の規則からの診断の抑制をサポートします。

使い方の規則

使い方の規則は、MSTest の適切な使い方をサポートします。

概念別のルール

一般的なテスト シナリオと概念別に整理されたルールを見つけます。

テスト構造と属性

テスト クラスとメソッドが適切に構造化され、装飾されていることを確認するのに役立つ規則:

  • MSTEST0002 - テスト クラスが有効である必要があります
  • MSTEST0003 - テスト メソッドが有効である必要があります
  • MSTEST0004 - パブリック型はテスト クラスにする必要があります
  • MSTEST0007 - テスト メソッドで属性を使用する
  • MSTEST0016 - テスト クラスにテスト メソッドが必要です
  • MSTEST0029 - パブリック メソッドをテスト メソッドにする必要がある
  • MSTEST0030 - テスト メソッドを含む型はテスト クラスにする必要があります
  • MSTEST0036 - シャドウを使用しない
  • MSTEST0041 - テスト クラスで条件ベースの属性を使用する
  • MSTEST0044 - DataTestMethod よりも TestMethod を優先する
  • MSTEST0056 - TestMethodAttribute が DisplayName を正しく設定する必要がある
  • MSTEST0057 - TestMethodAttribute でソース情報を伝達する必要がある
  • MSTEST0060 - TestMethodAttribute の重複
  • MSTEST0063 - テスト クラスには有効なコンストラクターが必要です

関連ドキュメント: MSTest を使用してテストを記述する

非同期/待機パターン

非同期テスト コードを正しく記述するための規則:

  • MSTEST0013 - AssemblyCleanup が有効である必要があります (非同期規則を含む)
  • MSTEST0027 - テスト メソッドの非同期サフィックスを抑制する
  • MSTEST0028 - テスト フィクスチャ メソッドの非同期サフィックスを抑制する
  • MSTEST0039 - 新しい Assert.Throws メソッドを使用する (非同期バリアント)
  • MSTEST0040 - 非同期 void コンテキストでのアサートの使用を回避する
  • MSTEST0045 - タイムアウト操作に協調キャンセルを使用する
  • MSTEST0049 - Flow TestContext CancellationToken
  • MSTEST0054 - CancellationToken プロパティを使用する

関連ドキュメント: TestContext

データドリブン テスト

データ ドリブン テスト シナリオを操作するためのルール:

  • MSTEST0007 - テスト メソッドで属性を使用する
  • MSTEST0014 - DataRow が有効である必要があります
  • MSTEST0018 - DynamicData が有効である必要があります
  • MSTEST0042 - 重複する DataRow
  • MSTEST0052 - 明示的な DynamicDataSourceType を回避する
  • MSTEST0062 - out/ref テスト メソッドパラメーターを回避する

関連ドキュメント: データドリブン テスト

ライフサイクルと初期化

テストの初期化、クリーンアップ、およびライフサイクル管理の規則:

  • MSTEST0008 - TestInitialize が有効である必要があります
  • MSTEST0009 - TestCleanup が有効である必要があります
  • MSTEST0010 - ClassInitialize が有効である必要があります
  • MSTEST0011 - ClassCleanup が有効である必要があります
  • MSTEST0012 - AssemblyInitialize が有効である必要があります
  • MSTEST0013 - AssemblyCleanup が有効である必要があります
  • MSTEST0019 - コンストラクターよりも TestInitialize を優先する
  • MSTEST0020 - TestInitialize よりもコンストラクターを優先する
  • MSTEST0021 - TestCleanup よりも Dispose を優先する
  • MSTEST0022 - Dispose よりも TestCleanup を優先する
  • MSTEST0034 - ClassCleanupBehavior.EndOfClass を使用する
  • MSTEST0050 - グローバル テスト フィクスチャが有効である必要がある

関連ドキュメント: ライフサイクル

Assertions

アサーション メソッドを正しく効果的に使用するための規則:

  • MSTEST0006 - ExpectedException 属性を回避する
  • MSTEST0014 - DataRow が有効である必要があります
  • MSTEST0017 - アサーション引数を正しい順序で渡す必要がある
  • MSTEST0023 - ブールアサーションを否定してはいけません
  • MSTEST0025 - 常にfalseになる条件よりもAssert.Failを推奨する
  • MSTEST0026 - アサーション引数は条件付きアクセスを回避する必要がある
  • MSTEST0032 - 常に真のアサートの条件を確認する
  • MSTEST0037 - 適切なアサート メソッドを使用する
  • MSTEST0038 - 値型で Assert.AreSame を使用しないようにする
  • MSTEST0039 - 新しい Assert.Throws メソッドを使用する
  • MSTEST0046 - StringAssert の代わりに Assert を使用する
  • MSTEST0051 - Assert.Throws には単一のステートメントを含める必要があります
  • MSTEST0053 - Assert 形式パラメーターを回避する
  • MSTEST0058 - catch ブロック内のアサートを回避する

関連ドキュメント: アサーション

TestContext

TestContext オブジェクトを適切に使用するための規則:

  • MSTEST0005 - TestContext が有効である必要があります
  • MSTEST0024 - 静的な TestContext を格納しない
  • MSTEST0033 - null 非許容参照が初期化されていない警告を抑制する
  • MSTEST0048 - TestContext プロパティの使用方法
  • MSTEST0049 - Flow TestContext CancellationToken
  • MSTEST0054 - CancellationToken プロパティを使用する

関連ドキュメント: TestContext

テスト構成

テストの実行、並列化、およびその他のテスト設定を構成するための規則:

  • MSTEST0001 - Parallelize 属性を使用する
  • MSTEST0015 - テスト メソッドは無視しないでください
  • MSTEST0031 - System.ComponentModel.DescriptionAttribute を使用しない
  • MSTEST0035 - テスト メソッドまたはテスト クラスで DeploymentItem を使用する
  • MSTEST0043 - テスト メソッドで retry 属性を使用する
  • MSTEST0045 - タイムアウト操作に協調キャンセルを使用する
  • MSTEST0055 - 文字列メソッドの戻り値を無視しない
  • MSTEST0059 - 属性を正しく並列化する
  • MSTEST0061 - ランタイム チェックの代わりに OSCondition 属性を使用する

関連ドキュメント: MSTest の構成テストの実行

すべてのルール (クイック リファレンス)

ルール ID カテゴリ Title 既定の重大度
MSTEST0001 Performance Parallelize 属性を使用する Info
MSTEST0002 Usage テスト クラスが有効である必要がある Warnung
MSTEST0003 Usage テスト メソッドが有効である必要がある 警告→エラー*
MSTEST0004 Design パブリック型はテスト クラスにする必要がある Info
MSTEST0005 Usage TestContext は有効である必要があります Warnung
MSTEST0006 Design ExpectedException 属性を回避する Info
MSTEST0007 Usage テスト メソッドで属性を使用する Warnung
MSTEST0008 Usage TestInitialize が有効である必要がある Warnung
MSTEST0009 Usage TestCleanup が有効である必要がある Warnung
MSTEST0010 Usage ClassInitialize は有効である必要があります Warnung
MSTEST0011 Usage ClassCleanup は有効である必要があります Warnung
MSTEST0012 Usage AssemblyInitialize は有効である必要があります Warnung
MSTEST0013 Usage AssemblyCleanup が有効である必要がある Warnung
MSTEST0014 Usage DataRow は有効である必要があります Warnung
MSTEST0015 Design テスト メソッドは無視しないでください なし (オプトイン)
MSTEST0016 Design テスト クラスにはテスト メソッドが必要です Info
MSTEST0017 Usage アサーション引数を正しい順序で渡す必要がある Info
MSTEST0018 Usage DynamicData は有効である必要がある Warnung
MSTEST0019 Design コンストラクターよりも TestInitialize を優先する なし (オプトイン)
MSTEST0020 Design TestInitialize よりもコンストラクターを優先する なし (オプトイン)
MSTEST0021 Design TestCleanup よりも Dispose を優先する なし (オプトイン)
MSTEST0022 Design Dispose よりも TestCleanup を優先する なし (オプトイン)
MSTEST0023 Usage ブールアサーションを否定しない Info
MSTEST0024 Usage 静的な TestContext を格納しない Warnung
MSTEST0025 Design 常に偽となる条件よりもAssert.Failを優先する Info
MSTEST0026 Usage アサーション引数は条件付きアクセスを回避する必要がある Info
MSTEST0027 Suppression テスト メソッドの非同期サフィックスを抑制する N/A
MSTEST0028 Suppression テストフィクスチャメソッドの非同期サフィックスを削除する N/A
MSTEST0029 Design パブリック メソッドをテスト メソッドにする必要がある Info
MSTEST0030 Usage テスト メソッドを含む型はテスト クラスである必要があります Warnung
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 シャドウを使用しない Warnung
MSTEST0037 Usage 適切なアサート メソッドを使用する Info
MSTEST0038 Usage 値型を使用して Assert.AreSame を回避する Info
MSTEST0039 Usage 新しい Assert.Throws メソッドを使用する Info
MSTEST0040 Usage 非同期 void コンテキストでのアサートの使用を避ける Warnung
MSTEST0041 Usage テスト クラスで条件ベースの属性を使用する Warnung
MSTEST0042 Usage 重複データ行 Warnung
MSTEST0043 Usage テスト メソッドで retry 属性を使用する 警告→エラー*
MSTEST0044 Design DataTestMethod よりも TestMethod を優先する Info
MSTEST0045 Design タイムアウトに協調キャンセルを使用する Info
MSTEST0046 Usage StringAssert の代わりに Assert を使用する Info
MSTEST0048 Usage TestContext プロパティの使用方法 Warnung
MSTEST0049 Usage フロー テストコンテキスト キャンセレーショントークン Info
MSTEST0050 Usage グローバルテスト治具は有効である必要がある Warnung
MSTEST0051 Usage Assert.Throws には単一のステートメントを含める必要があります Info
MSTEST0052 Usage 明示的な DynamicDataSourceType を避ける Info
MSTEST0053 Usage Assert 形式パラメーターの使用を回避する Info
MSTEST0054 Usage CancellationToken プロパティを使用する Info
MSTEST0055 Usage 文字列メソッドの戻り値を無視しない Warnung
MSTEST0056 Usage TestMethodAttribute が DisplayName を正しく設定する必要がある Info
MSTEST0057 Usage TestMethodAttribute はソース情報を伝達する必要がある Warnung
MSTEST0058 Usage catch ブロック内のアサートを回避する Info
MSTEST0059 Usage 「Parallelize」属性を正しく適用する Warnung
MSTEST0060 Usage TestMethodAttribute の重複 Warnung
MSTEST0061 Usage ランタイム チェックの代わりに OSCondition 属性を使用する Info
MSTEST0062 Usage out/ref テスト メソッドのパラメーターを回避する Warnung
MSTEST0063 Usage テスト クラスには有効なコンストラクターが必要です Warnung

* Recommended モードと All モードでエラーにエスカレート。

MSTESTEXPの

MSTest のいくつかの API は、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