MSTEST0026: アサーションでの条件付きアクセスを回避する
プロパティ | 値 |
---|---|
ルール ID | MSTEST0026 |
Title | アサーションでの条件付きアクセスを回避する |
カテゴリ | 使用法 |
修正が中断ありか中断なしか | なし |
既定で有効 | はい (3.5 から 3.7 まで)。 X (3.8 以降) |
既定の重要度 | 情報 |
導入されたバージョン | 3.5.0 |
コード修正の有無 | いいえ |
原因
この規則では、null 条件演算子を含む引数(?.)
または ?[]
が以下のアサーション メソッドに渡されると、診断が発生します:
Assert.IsTrue
Assert.IsFalse
Assert.AreEqual
Assert.AreNotEqual
Assert.AreSame
Assert.AreNotSame
CollectionAssert.AreEqual
CollectionAssert.AreNotEqual
CollectionAssert.AreEquivalent
CollectionAssert.AreNotEquivalent
CollectionAssert.Contains
CollectionAssert.DoesNotContain
CollectionAssert.AllItemsAreNotNull
CollectionAssert.AllItemsAreUnique
CollectionAssert.AllItemsAreInstancesOfType
CollectionAssert.IsSubsetOf
CollectionAssert.IsNotSubsetOf
StringAssert.Contains
StringAssert.StartsWith
StringAssert.EndsWith
StringAssert.Matches
StringAssert.DoesNotMatch
規則の説明
単体テストのアサーションの目的は、特定の条件が満たされていることを確認することです。 アサーションで条件付きアクセス演算子を使用すると、アクセスされるオブジェクトの状態に応じて、満たされる場合と満たされない可能性がある追加の条件が導入されます。 これにより、一貫性のないテスト結果が得られ、テストの明確性が低下する可能性があります。
違反の修正方法
アサーション メソッドに渡されるときに、引数に (?.)
または ?[]
が含まれていないことを確認します。 代わりに、アサーションを作成する前に null チェックを実行してください。
Company? company = GetCompany();
Assert.AreEqual("Contoso", company?.Name); // MSTEST0026
StringAssert.Contains(company?.Address, "Brazil"); // MSTEST0026
// Fixed code
Assert.IsNotNull(company);
Assert.AreEqual("Contoso", company.Name);
StringAssert.Contains(company.Address, "Brazil");
どのようなときに警告を抑制するか
この規則の警告を抑制することはお勧めしません。
警告を抑制する
単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。
#pragma warning disable MSTEST0026
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0026
ファイル、フォルダー、またはプロジェクトのルールを無効にするには、構成ファイルでその重要度を none
に設定します。
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0026.severity = none
詳細については、「コード分析の警告を抑制する方法」を参照してください。
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET