| 屬性 | 值 |
|---|---|
| 規則識別碼 | MSTEST0026 |
| 職稱 | 避免判斷提示中的條件式存取 |
| 類別 | 使用方式 |
| 修正程式是中斷或非中斷 | 不中斷 |
| 預設為啟用 | 是(從 3.5 到 3.7)。 否 (從 3.8 開始) |
| 預設嚴重性 | 資訊 |
| 在版本中引進 | 3.5.0 |
| 是否有程式碼修正? | No |
原因
當包含 null 條件運算子(?.) 或 ?[] 的引數傳遞至以下判斷提示方法時,此規則會引發診斷:
Assert.IsTrueAssert.IsFalseAssert.AreEqualAssert.AreNotEqualAssert.AreSameAssert.AreNotSameCollectionAssert.AreEqualCollectionAssert.AreNotEqualCollectionAssert.AreEquivalentCollectionAssert.AreNotEquivalentCollectionAssert.ContainsCollectionAssert.DoesNotContainCollectionAssert.AllItemsAreNotNullCollectionAssert.AllItemsAreUniqueCollectionAssert.AllItemsAreInstancesOfTypeCollectionAssert.IsSubsetOfCollectionAssert.IsNotSubsetOfStringAssert.ContainsStringAssert.StartsWithStringAssert.EndsWithStringAssert.MatchesStringAssert.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
如需詳細資訊,請參閱 如何在隱藏程式代碼分析警告。