"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が使用されます。
メモ
警告として既定で有効になっているルールは、実行時に問題が発生することが予想される違反です。
Recommended
これは、ほとんどの開発者が使用する必要があるモードです。 既定で Info (suggestion) 重大度で有効になっているルールは警告に昇格されます。 次のルールは、 Recommended モードと All モードの両方でエラーにエスカレートされます。
All
このモードは Recommended よりも積極的です。 すべてのルールが警告として有効になっています。 さらに、次の規則がエラーにエスカレートされます。
メモ
次のルールは完全にオプトインされ、Default、Recommended、または All モードでは有効になりません。
カテゴリ別のルール
アナライザー ルールは、次のカテゴリに分類されます。
デザイン規則
デザイン規則は、適切な設計と優れたプラクティスに準拠したテスト スイートの作成と保守に役立ちます。
パフォーマンス規則
パフォーマンス規則は高パフォーマンス テストをサポートします。
抑制規則
抑制規則は、他の規則からの診断の抑制をサポートします。
使い方の規則
使い方の規則は、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
.NET