MSTEST0026: 어설션에서 조건부 액세스 방지
속성 | 값 |
---|---|
규칙 ID | MSTEST0026 |
제목 | 어설션에서 조건부 액세스 방지 |
범주 | 사용 |
수정 사항이 주요 변경인지 여부 | 주요 변경 아님 |
기본적으로 사용하도록 설정됨 | 예(3.5에서 3.7까지). 아니요(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에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET