MSTEST0083: 'Process.Start' の前に 'File.Exists' チェックの代わりに '[ExecutableCondition]' を使用します

財産 価値
ルール識別子 MSTEST0083
タイトル 'Process.Start' の前に 'File.Exists' チェックの代わりに '[ExecutableCondition]' を使用します
カテゴリ 使い方
修正が破壊的か非破壊的か Non-breaking
既定で有効 Yes
既定の重大度 情報
バージョン で導入された 4.4.0 (プレビュー)
コード修正はありますか はい(C# の場合のみ)

Important

このアナライザーは MSTest 4.4 用に計画されており、MSTest 4.4.0 がリリースされるまでプレビュー ビルドでのみ使用できます。

原因

テスト メソッドは、最初に実行可能ファイルが存在するかどうかを確認し、存在しない場合は Assert.Inconclusive を返すか呼び出し、次に同じ実行可能ファイル パスで Process.Start を呼び出します。

ルールの説明

[ExecutableCondition]を使用して、テストに実行可能ファイルが必要であることを宣言します。 MSTest が実行可能ファイルを解決できない場合、この属性はテストをスキップ済みとして報告します。 早期返却ではテストが成功として誤って報告され、命令型チェックでは検出ツールとレポート ツールから要件が非表示になります。

[TestMethod]
public void RunsTool()
{
    if (!File.Exists("tool.exe")) return; // Violation
    Process.Start("tool.exe");
}

アナライザーは、File.Exists以降のProcess.Startの両方で同じ定数実行可能パスを使用する場合に、意味のあるelseブランチがない最初のステートメント ガードを認識します。

違反を修正する方法

ガードを [ExecutableCondition]に置き換えます。

[TestMethod]
[ExecutableCondition("tool.exe")]
public void RunsTool() => Process.Start("tool.exe");

C# コード修正により、ガードが属性に置き換えられます。 Visual Basicは診断を報告しますが、自動修正は提供しません。

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

ファイル チェックが実行可能な前提条件ではなくデータを検証するとき、またはテストで ExecutableConditionAttribute 表現できない動作が必要な場合は、ルールを抑制します。

警告を抑制する

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

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

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

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

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

こちらも参照ください