MSTEST0079: ランタイム チェックの代わりに ArchitectureCondition 属性を使用する

財産
ルール識別子 MSTEST0079
タイトル ランタイム チェックの代わりに ArchitectureCondition 属性を使用する
Category Usage
修正が破壊的か非破壊的か Non-breaking
既定で有効 Yes
既定の重大度 情報
バージョン で導入された 4.4.0 (プレビュー)
コード修正はありますか はい(C# の場合のみ)

原因

テスト メソッドの最初のステートメントは、ProcessArchitectureArchitecture値と比較し、[ArchitectureCondition]属性を使用するのではなく、早期に返すか、Assert.Inconclusiveを呼び出します。

ルールの説明

RuntimeInformation.ProcessArchitectureを比較し、早期に戻る、またはAssert.Inconclusiveを呼び出すテスト メソッドでは、代わりに [ArchitectureCondition] 属性を使用する必要があります。 この属性は宣言型で検出可能であり、テストは成功ではなくスキップ済みとして報告されます。早期の戻り値では報告されません。

[TestMethod]
public void TestMethod()
{
    if (RuntimeInformation.ProcessArchitecture != Architecture.X64) return; // Violation
}

アナライザーは、メソッドの最初のステートメントであり、 else ブランチがなく、参照される Architecture メンバーが一致する TestArchitectures フラグを持つ場合にのみ、ガードを認識します。

違反を修正する方法

ランタイム チェックを [ArchitectureCondition] 属性に置き換えます。

[TestMethod]
[ArchitectureCondition(TestArchitectures.X64)]
public void TestMethod() { }

C# コード修正により、ガードが属性に置き換えられます。 Visual Basicコードにはこの診断がありますが、自動修正はありません。属性を手動で適用します。

どのようなときに警告を抑制するか

ランタイム チェックが単純な first-statement ガードよりも複雑な場合や、 [ArchitectureCondition] で表現できない条件付きロジックが必要な場合は、この警告を抑制できます。

警告を抑制する

単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。

#pragma warning disable MSTEST0079
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0079

ファイル、フォルダー、またはプロジェクトのルールを無効にするには、noneでその重要度をに設定します。

[*.{cs,vb}]
dotnet_diagnostic.MSTEST0079.severity = none

詳細については、「 コード分析の警告を抑制する方法」を参照してください。

こちらも参照ください