Assert 네임스페이스의 Microsoft.VisualStudio.TestTools.UnitTesting 클래스를 사용하여 특정 기능을 확인합니다. 테스트 메서드는 애플리케이션의 코드를 실행하지만 Assert 문을 포함할 때만 정확성을 보고합니다.
개요
MSTest는 세 가지 어설션 클래스를 제공합니다.
| 클래스 | 목적 |
|---|---|
Assert |
값, 형식 및 예외에 대한 범용 어설션입니다. |
StringAssert |
패턴, 부분 문자열 및 비교에 대한 문자열별 어설션입니다. |
CollectionAssert |
컬렉션 비교 및 유효성 검사를 위한 컬렉션 어설션입니다. |
팁 (조언)
기능이 둘 다 Assert 있는 경우 클래스StringAssert/CollectionAssert를 선호합니다.Assert 이 클래스는 Assert 더 나은 검색 기능을 제공하며 새 코드에 권장되는 선택입니다.
StringAssert 및 CollectionAssert은 하위 호환성을 위해 유지됩니다.
모든 어설션 메서드는 어설션이 실패할 때 표시되는 선택적 메시지 매개 변수를 수락하여 원인을 식별하는 데 도움이 됩니다.
Assert.AreEqual(expected, actual, "Values should match after processing");
Assert 클래스
Assert 클래스를 사용하여 테스트 중인 코드가 예상대로 작동하는지 확인합니다.
일반적인 어설션 메서드
[TestMethod]
public async Task AssertExamples()
{
// Equality
Assert.AreEqual(5, calculator.Add(2, 3));
Assert.AreNotEqual(0, result);
// Reference equality
Assert.AreSame(expected, actual);
Assert.AreNotSame(obj1, obj2);
// Boolean conditions
Assert.IsTrue(result > 0);
Assert.IsFalse(string.IsNullOrEmpty(name));
// Null checks
Assert.IsNull(optionalValue);
Assert.IsNotNull(requiredValue);
// Type checks
Assert.IsInstanceOfType<IDisposable>(obj);
Assert.IsNotInstanceOfType<string>(obj);
// Exception testing (MSTest v3.8+)
Assert.ThrowsExactly<ArgumentNullException>(() => service.Process(null!));
await Assert.ThrowsExactlyAsync<InvalidOperationException>(
async () => await service.ProcessAsync());
}
사용 가능한 API
- Assert.AreEqual
- Assert.AreNotEqual
- Assert.AreNotSame
- Assert.AreSame
- Assert.Contains
- Assert.ContainsSingle
- Assert.DoesNotContain
- Assert.DoesNotEndWith
- Assert.DoesNotMatchRegex
- Assert.DoesNotStartWith
- Assert.Fail
- Assert.HasCount
- Assert.Inconclusive
- Assert.IsEmpty
- Assert.IsFalse
- Assert.IsGreaterThan
- Assert.IsGreaterThanOrEqualTo
- Assert.IsInRange
- Assert.IsInstanceOfType
- Assert.IsLessThan
- Assert.IsLessThanOrEqualTo
- Assert.IsNegative
- Assert.IsNotEmpty
- Assert.IsNotInstanceOfType
- Assert.IsNotNull
- Assert.IsNull
- Assert.IsPositive
- Assert.IsTrue
- Assert.MatchesRegex
- Assert.StartsWith
- Assert.Throws
- Assert.ThrowsAsync
- Assert.ThrowsExactly
- Assert.ThrowsExactlyAsync
StringAssert 클래스
StringAssert 클래스를 사용하여 문자열을 비교하고 검사합니다.
비고
모든 StringAssert 메서드는 Assert 클래스의 대응물이 있습니다. 보다 나은 발견 가능성을 위해 Assert 메서드를 선호합니다. 이전 버전과의 호환성을 유지하기 위해 StringAssert 클래스를 유지합니다.
사용 가능한 API는 다음과 같습니다.
- StringAssert.Contains
- StringAssert.DoesNotMatch
- StringAssert.EndsWith
- StringAssert.Matches
- StringAssert.StartsWith
CollectionAssert 클래스
CollectionAssert 클래스를 사용하여 개체 컬렉션을 비교하고 컬렉션의 상태를 확인합니다.
비고
Assert 클래스에 동일한 메서드가 있을 경우(예: Assert.Contains, Assert.DoesNotContain), 검색 가능성을 높이기 위해 Assert를 사용하는 것이 좋습니다. 클래스는 CollectionAssert 주로 이전 버전과의 호환성을 위해 유지 관리됩니다.
사용 가능한 API는 다음과 같습니다.
- CollectionAssert.AllItemsAreInstancesOfType
- CollectionAssert.AllItemsAreNotNull
- CollectionAssert.AllItemsAreUnique
- CollectionAssert.AreEqual
- CollectionAssert.AreEquivalent
- CollectionAssert.AreNotEqual
- CollectionAssert.AreNotEquivalent
- CollectionAssert.Contains
- CollectionAssert.DoesNotContain
- CollectionAssert.IsNotSubsetOf
- CollectionAssert.IsSubsetOf
모범 사례
특정 어설션 사용: 더 나은 실패 메시지를 위해
AreEqual을IsTrue(a == b)보다 선호하세요.설명이 포함된 메시지 포함: 명확한 어설션 메시지를 사용하여 오류를 빠르게 식별할 수 있습니다.
한 번에 한 가지 테스트: 각 테스트 메서드는 단일 동작을 확인해야 합니다.
예외를 위해
Throws/ThrowsExactly사용: MSTest v3.8 이상에서는ExpectedException특성보다Assert.Throws와 그 비동기 대응 항목(Assert.ThrowsExactly,ThrowsAsync)을 선호합니다.보다 을(를) 선호: 두 클래스 모두에 기능이 있는 경우, 검색 가능성과 일관성을 높이기 위해 클래스를 사용합니다.
관련 분석기
다음 분석기는 어설션의 적절한 사용을 보장하는 데 도움이 됩니다.
-
MSTEST0006 - 특성을 사용하지 말고
ExpectedException대신 메서드를 사용합니다Assert.Throws. - MSTEST0017 - 어설션 인수는 올바른 순서로 전달되어야 합니다.
- MSTEST0023 - 부울 어설션을 부정하지 마세요.
-
MSTEST0025 - 항상 거짓인 조건 대신
Assert.Fail을(를) 선호하세요. - MSTEST0026 - 어설션 인수는 조건부 액세스를 피해야 합니다.
- MSTEST0032 - 항상 true인 어설션 조건을 검토합니다.
- MSTEST0037 - 적절한 어설션 메서드를 사용합니다.
-
MSTEST0038 - 값 형식과 함께
Assert.AreSame를 사용하지 마세요. -
MSTEST0039 - 최신 메서드를
Assert.Throws사용합니다. - MSTEST0040 - 비동기 void 컨텍스트에서 어설션을 사용하지 않습니다.
-
MSTEST0046 - 대신
Assert사용합니다StringAssert. -
-
Assert.ThrowsMSTEST0051 는 단일 문을 포함해야 합니다. -
MSTEST0053 - 형식 매개 변수를 사용하지 않습니다
Assert. - MSTEST0058 - catch 블록에서 어설션을 사용하지 않습니다.
참고하십시오
.NET