| 財産 | 値 |
|---|---|
| ルール識別子 | MSTEST0080 |
| タイトル | 環境チェックの代わりに CICondition 属性を使用する |
| Category | Usage |
| 修正が破壊的か非破壊的か | Non-breaking |
| 既定で有効 | Yes |
| 既定の重大度 | 情報 |
| バージョン で導入された | 4.4.0 (プレビュー) |
| コード修正はありますか | はい(C# の場合のみ) |
原因
テスト メソッドの最初のステートメントは、Environment.GetEnvironmentVariable("CI")の結果を null チェックし、[CICondition]属性を使用するのではなく、早期に返すか、Assert.Inconclusiveを呼び出します。
ルールの説明
CI環境変数を null チェックし、Assert.Inconclusiveの早期戻りまたは呼び出しを行うテスト メソッドでは、代わりに [CICondition] 属性を使用する必要があります。 この属性は、MSTest が認識するすべての継続的インテグレーション プロバイダーを認識し、テストが成功ではなくスキップ済みとして報告されます。早期の戻り値では認識されません。
[TestMethod]
public void TestMethod()
{
if (Environment.GetEnvironmentVariable("CI") is null) return; // Violation
}
アナライザーは、すべての主要プロバイダーが設定する一般的な CI 変数に意図的に制限されます。
TF_BUILDなど、プロバイダー固有の変数に対するガードは "Azure Pipelinesスキップ" を意味し、[CICondition]は "任意の CI をスキップ" を意味するため、アナライザーはプロバイダー固有のチェックを置き換えることを推奨しません。
違反を修正する方法
環境変数チェックを [CICondition] 属性に置き換えます。
[TestMethod]
[CICondition(ConditionMode.Include)]
public void TestMethod() { }
C# コード修正により、ガードが属性に置き換えられます。 Visual Basicコードにはこの診断がありますが、自動修正はありません。属性を手動で適用します。
どのようなときに警告を抑制するか
環境チェックが単純な最初のステートメントの null チェックよりも複雑な場合や、 [CICondition] 表現できない条件付きロジックが必要な場合は、この警告を抑制できます。
警告を抑制する
単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。
#pragma warning disable MSTEST0080
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0080
ファイル、フォルダー、またはプロジェクトのルールを無効にするには、noneでその重要度をに設定します。
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0080.severity = none
詳細については、「 コード分析の警告を抑制する方法」を参照してください。
こちらも参照ください
.NET