使用規則は、MSTest 属性、メソッド、およびパターンの適切な使用をサポートします。 これらの規則は、一般的な間違いをキャッチし、テストがフレームワークの要件と規則に従っていることを確認します。
このカテゴリのルール
| ルール ID | Title | Severity | 修正完了 |
|---|---|---|---|
| MSTEST0002 | テスト クラスは有効である必要があります。 | Warnung | イエス |
| MSTEST0003 | テスト メソッドは有効である必要があります。 | 警告→エラー* | イエス |
| MSTEST0005 | TestContext は有効である必要があります。 | Warnung | イエス |
| MSTEST0007 | テスト メソッドで属性を使用します。 | Warnung | いいえ |
| MSTEST0008 | TestInitialize は有効である必要があります。 | Warnung | イエス |
| MSTEST0009 | TestCleanup が有効である必要があります。 | Warnung | イエス |
| MSTEST0010 | ClassInitialize は有効である必要があります。 | Warnung | イエス |
| MSTEST0011 | ClassCleanup は有効である必要があります。 | Warnung | イエス |
| MSTEST0012 | AssemblyInitialize は有効である必要があります。 | Warnung | イエス |
| MSTEST0013 | AssemblyCleanup が有効である必要があります。 | Warnung | イエス |
| MSTEST0014 | DataRow は有効である必要があります。 | Warnung | イエス |
| MSTEST0017 | アサーション引数は正しい順序で渡す必要があります。 | Info | イエス |
| MSTEST0018 | DynamicData は有効である必要があります。 | Warnung | イエス |
| MSTEST0023 | ブール型アサーションを否定しないでください。 | Info | イエス |
| MSTEST0024 | 静的な TestContext は格納しないでください。 | Warnung | いいえ |
| MSTEST0026 | アサーションの引数では、条件付きアクセスの使用を回避する必要があります。 | Info | いいえ |
| MSTEST0030 | テスト メソッドを含む型は、テスト クラスである必要があります。 | Warnung | イエス |
| MSTEST0031 | System.ComponentModel.DescriptionAttribute を使用しないでください。 | Info | イエス |
| MSTEST0032 | 常に真となるアサート条件をレビューします。 | Info | いいえ |
| MSTEST0034 | ClassCleanupBehavior.EndOfClass を使用します。 | Info | イエス |
| MSTEST0035 | テスト メソッドまたはテスト クラスで DeploymentItem を使用します。 | Info | いいえ |
| MSTEST0037 | 適切なアサート メソッドを使用します。 | Info | イエス |
| MSTEST0038 | 値型では Assert.AreSame を使用しないでください。 | Info | イエス |
| MSTEST0039 | 新しい Assert.Throws メソッドを使用します。 | Info | イエス |
| MSTEST0040 | 非同期 void コンテキストではアサートを使用しないでください。 | Warnung | いいえ |
| MSTEST0041 | テスト クラスで条件ベースの属性を使用します。 | Warnung | イエス |
| MSTEST0042 | 重複する DataRow.。 | Warnung | いいえ |
| MSTEST0043 | テスト メソッドで retry 属性を使用します。 | 警告→エラー* | イエス |
| MSTEST0046 | StringAssert の代わりに Assert を使用します。 | Info | イエス |
| MSTEST0048 | TestContext プロパティの使用方法。 | Warnung | いいえ |
| MSTEST0049 | テストコンテキストのキャンセル用トークンを流します。 | Info | イエス |
| MSTEST0050 | グローバルテストフィクスチャは有効である必要があります。 | Warnung | イエス |
| MSTEST0051 | Assert.Throws には単一のステートメントを含める必要があります。 | Info | イエス |
| MSTEST0052 | 明示的な DynamicDataSourceType は避けてください。 | Info | イエス |
| MSTEST0053 | Assert 形式のパラメーターは使用しないでください。 | Info | イエス |
| MSTEST0054 | CancellationToken プロパティを使用します。 | Info | イエス |
| MSTEST0055 | 文字列メソッドの戻り値を無視しないでください。 | Warnung | いいえ |
| MSTEST0056 | TestMethodAttribute は DisplayName を正しく設定する必要があります。 | Info | イエス |
| MSTEST0057 | TestMethodAttribute はソース情報を伝達する必要があります。 | Warnung | いいえ |
| MSTEST0058 | catch ブロック内のアサートは避けてください。 | Info | いいえ |
| MSTEST0059 | パラレライズ属性を正しく使用する。 | Warnung | いいえ |
| MSTEST0060 | TestMethodAttribute を複製します。 | Warnung | イエス |
| MSTEST0061 | ランタイム チェックの代わりに OSCondition 属性を使用します。 | Info | イエス |
| MSTEST0062 | out/ref テスト メソッドのパラメーターは使用しないでください。 | Warnung | イエス |
| MSTEST0063 | テスト クラスには有効なコンストラクターが必要です。 | Warnung | いいえ |
| MSTEST0064 | 非同期アサーションメソッドを使用することを推奨します。 | Info | いいえ |
| MSTEST0065 | コレクション型では Assert.AreEqual を使用しないでください。 |
Warnung | いいえ |
| MSTEST0067 | テスト コードで呼び出しを同期的にブロックしないようにします。 | 情報 (既定では無効) | いいえ |
| MSTEST0068 |
Assertの代わりに CollectionAssert を使用します。 |
Info | イエス |
| MSTEST0069 | 継承された [TestClass] は、MSTest ソース ジェネレーターによって無視されます。 |
Warnung | いいえ |
| MSTEST0070 |
[MemberCondition] 引数は有効である必要があります。 |
Warnung | いいえ |
| MSTEST0071 | テスト メソッドでは、その名前と同じ表示名を指定しないでください。 | Info | イエス |
| MSTEST0072 |
[AssemblyFixtureProvider] は、事前コンパイルではサポートされていません。 |
Warnung | いいえ |
| MSTEST0073 |
[ResourceLock] リソース キーには定数を使用します。 |
Info | いいえ |
| MSTEST0074 | プロセスグローバル状態の変更テストでは、リソース ロックを宣言する必要があります。 | Info | イエス |
| MSTEST0075 | 並列化されたテストで現在のディレクトリを変更しないでください。 | Info | イエス |
| MSTEST0076 | 並列化されたテストでプロセス全体のカルチャを変更しないようにします。 | Info | いいえ |
| MSTEST0077 | 並列化されたテストでは、ハードコードされたファイル システム パスまたは共有ファイルシステム パスを避けます。 | Info | いいえ |
| MSTEST0078 |
[DependsOn] 引数は有効である必要があります。 |
Warnung | いいえ |
| MSTEST0079 | ランタイム チェックの代わりに ArchitectureCondition 属性を使用します。 | Info | イエス |
| MSTEST0080 | 環境チェックの代わりに CICondition 属性を使用します。 | Info | イエス |
| MSTEST0081 |
[TestFilterProvider] は有効なテスト フィルターの種類を参照する必要があります。 |
Warnung | いいえ |
* Recommended モードと All モードでエラーにエスカレート。
一般的なシナリオ
テスト構造の検証
テスト クラス、メソッド、フィクスチャが MSTest の要件に従っていることを確認します。
- MSTEST0002: クラス レイアウトの要件をテストします (例: public、non-static)。
- MSTEST0003: テスト メソッドのレイアウト要件 (⚠️ がエラーにエスカレートされました)。
- MSTEST0030: [TestMethod] を持つメソッドは、[TestClass] に含める必要があります。
- MSTEST0063: クラス コンストラクターの検証をテストします。
- MSTEST0069: [TestClass] を直接適用して、ソースによって生成された検出によってクラスが検索されるようにします。
ライフサイクル メソッド
初期化メソッドとクリーンアップ メソッドを検証します。
- MSTEST0008: TestInitialize 検証。
- MSTEST0009: TestCleanup 検証。
- MSTEST0010: ClassInitialize 検証。
- MSTEST0011: ClassCleanup 検証。
- MSTEST0012: AssemblyInitialize 検証。
- MSTEST0013: AssemblyCleanup 検証。
- MSTEST0034: ClassCleanupBehavior.EndOfClass を設定します。
- MSTEST0050: グローバル テスト フィクスチャの検証。
- MSTEST0072: 事前コンパイルで共有アセンブリ フィクスチャ プロバイダーを使用しないでください。
データドリブン テスト
データ属性が正しく使用されていることを確認します。
- MSTEST0007: データ属性はテスト メソッド上にある必要があります。
- MSTEST0014: DataRow 検証。
- MSTEST0018: DynamicData 検証。
- MSTEST0042: 重複する DataRow を検出します。
- MSTEST0052: DynamicDataSourceType に自動検出を使用します。
- MSTEST0062: out/ref パラメーターは使用しないでください。
より優れたアサーションを書く
正しく効果的なアサーションの使用に関する規則:
- MSTEST0017: 予想値と実績値を正しい順序で渡します。
- MSTEST0023: 条件を否定しないでください (Assert.IsFalse を直接使用します)。
- MSTEST0026: アサーションで null 条件演算子を使用しないようにします。
- MSTEST0032: 常に真の条件を確認します。
- MSTEST0037: 最も適切なアサート メソッドを使用します。
- MSTEST0038: 値型で AreSame を使用しないでください。
- MSTEST0039: Assert.ThrowsExactly (新しい API) を使用します。
- MSTEST0046: StringAssert よりも Assert を優先します。
- MSTEST0051: Assert.Throws は 1 つのステートメントをテストする必要があります。
- MSTEST0053: 書式パラメーターの代わりに文字列補間を使用します。
- MSTEST0058: アサーションを catch ブロックに配置しないでください。
- MSTEST0064: 非同期コードでのブロックよりも非同期アサーション メソッドを優先します。
-
MSTEST0065: コレクション型では
Assert.AreEqualの使用を避けてください。 -
MSTEST0068:
AssertよりもCollectionAssertを優先します。
TestContext の使用方法
TestContext オブジェクトの適切な使用方法:
- MSTEST0005: TestContext プロパティの検証。
- MSTEST0024: TestContext は静的フィールドに格納しないでください。
- MSTEST0048: フィクスチャにおけるプロパティへのアクセス制限。
- MSTEST0049: TestContext からのフロー キャンセル トークン。
- MSTEST0054: TestContext.CancellationToken プロパティを使用します。
非同期パターン
非同期テスト コードの規則:
- MSTEST0040: 非同期 void メソッドではアサートを回避します。
-
MSTEST0067: テスト コードで
Thread.Sleep、Task.Wait、およびその他の同期的にブロックする呼び出しを回避する (オプトイン)。
並列テストの安全性
並列で実行されるテストの規則:
- MSTEST0073: リソース ロック キーに共有定数を使用します。
- MSTEST0074: プロセス グローバル状態に変更をロックします。
- MSTEST0075: 現在のディレクトリの変更をロックします。
- MSTEST0076: プロセス全体のカルチャの変異を回避します。
- MSTEST0077: 共有ファイル システム パスは避けてください。
テスト構成
- MSTEST0031: 適切な属性 (System.ComponentModel.Description ではなく) を使用します。
- MSTEST0035: DeploymentItem の使用方法。
- MSTEST0041: 条件属性はテスト クラスに存在する必要があります。
- MSTEST0043: 再試行属性はテスト メソッド上にある必要があります (⚠️ はエラーにエスカレートされます)。
- MSTEST0055: 文字列メソッドの戻り値を無視しないでください。
- MSTEST0056: TestMethodAttribute で DisplayName を正しく設定します。
- MSTEST0057: カスタム TestMethodAttribute にソース情報を伝達します。
- MSTEST0059: Parallelize と DoNotParallelize の両方を使用しないでください。
- MSTEST0060: TestMethodAttribute が重複しないようにします。
- MSTEST0061: プラットフォーム チェックに OSCondition 属性を使用します。
-
MSTEST0070:
[MemberCondition]引数は有効なメンバーを参照する必要があります。 - MSTEST0071: テスト メソッド名と同じ表示名を設定しないでください。
-
MSTEST0078:
[DependsOn]ターゲットと依存関係グラフを検証します。 -
MSTEST0079: ランタイム アーキテクチャ チェックの代わりに
ArchitectureConditionを使用します。 -
MSTEST0080: 環境チェックの代わりに
CIConditionを使用します。 - MSTEST0081: テスト フィルター プロバイダーの登録を検証します。
関連ドキュメント
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET