다음을 통해 공유


MSTest 구성

MSTest(Microsoft Testing Framework)는 .NET 애플리케이션용 테스트 프레임워크입니다. 이를 통해 테스트를 작성 및 실행할 수 있으며 Visual Studio 및 Visual Studio Code 테스트 탐색기, .NET CLI 및 다양한 CI 파이프라인에 통합된 테스트 도구 모음을 제공할 수 있습니다.

MSTest는 GitHub에서 호스트되는 지원되는 모든 .NET 대상(.NET Framework, .NET Core, .NET, UWP, WinUI 등)과 함께 작동하는 완벽하게 지원되는 오픈 소스 플랫폼 간 테스트 프레임워크입니다.

Runsettings

.runsettings 파일을 사용하여 단위 테스트를 실행하는 방법을 구성할 수 있습니다. 플랫폼과 관련된 runsettings 및 구성에 대해 자세히 알아보려면 VSTest runsettings 설명서 또는 MSTest 실행기 runsettings 설명서를 확인합니다.

MSTest 요소

다음 runsettings 항목을 사용하면 MSTest의 동작 방식을 구성할 수 있습니다.

구성 기본값
AssemblyCleanupTimeout 0 어셈블리 정리 방법의 각 인스턴스에 적용할 시간 제한을 전체적으로 지정합니다. 어셈블리 정리 메서드에 지정된 [Timeout] 특성은 전역 제한시간을 재정의합니다.
AssemblyInitializeTimeout 0 어셈블리 초기화 메서드의 각 인스턴스에 적용할 시간 제한을 전역적으로 지정합니다. 어셈블리 초기화 메서드에 지정된 [Timeout] 특성은 전역 제한 시간을 재정의합니다.
AssemblyResolution false 단위 테스트를 찾아서 실행하는 경우 추가 어셈블리에 대한 경로를 지정할 수 있습니다. 예를 들어 테스트 어셈블리와 동일한 디렉터리에 존재하지 않는 종속성 어셈블리에 대해 이러한 경로를 사용합니다. 경로를 지정하려면 디렉터리 경로 요소를 사용합니다. 경로는 환경 변수를 포함할 수 있습니다.

<AssemblyResolution> <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/> </AssemblyResolution>

이 기능은 .NET Framework 대상을 사용하는 경우에만 적용됩니다.
CaptureTraceOutput true 현재 실행 중인 테스트에 연결될 Console.Write*, Trace.Write*Debug.Write* API에서 오는 문자 메시지를 캡처합니다.
ClassCleanupLifecycle EndOfClass 어셈블리 끝에서 클래스 정리가 수행되도록 하려면 EndOfAssembly로 설정합니다. (EndOfClass가 기본값이므로 MSTest v4부터 더 이상 지원되지 않으며 ClassCleanup 동작만 해당)
ClassCleanupTimeout 0 클래스 정리 메서드의 각 인스턴스에 적용할 제한 시간을 전역적으로 지정합니다. 클래스 정리 메서드에 지정된 [Timeout] 특성은 전역 시간 제한을 재정의합니다.
ClassInitializeTimeout 0 클래스 초기화 메서드의 각 인스턴스에 적용할 제한 시간을 전역적으로 지정합니다. 클래스 초기화 메서드에 지정된 [Timeout] 특성은 전역 시간 제한을 재정의합니다.
ConsiderFixturesAsSpecialTests false AssemblyInitialize, AssemblyCleanup, ClassInitialize, ClassCleanup를 Visual Studio 및 Visual Studio 코드 Test Explorer.trx 로그에 개별 항목으로 표시하려면 이 값을 true로 설정합니다.
DeleteDeploymentDirectoryAfterTestRunIsComplete true 테스트를 실행한 후 배포 디렉터리를 유지하려면 이 값을 false로 설정합니다.
DeploymentEnabled true 값을 false로 설정하면 테스트 메서드에서 지정한 배포 항목이 배포 디렉터리에 복사되지 않습니다.
DeployTestSourceDependencies true 테스트 원본 참조를 배포할지 여부를 나타내는 값입니다.
EnableBaseClassTestMethodsFromOtherAssemblies true 상속하는 테스트 클래스와 다른 어셈블리의 기본 클래스에서 테스트 메서드를 검색할 수 있는지 여부를 나타내는 값입니다.
ForcedLegacyMode false 이전 버전의 Visual Studio에서 MSTest 어댑터는 더욱 빠르고 확장성 가능하도록 최적화되었습니다. 테스트가 실행되는 순서와 같은 일부 동작은 이전 버전 Visual Studio처럼 정확하지 않을 수 있습니다. 이전 테스트 어댑터를 사용하려면 값을 true로 설정합니다.

예를 들어, 단위 테스트에 대해 app.config 파일을 지정한 경우 이 설정을 사용할 수 있습니다.

새 어댑터를 사용할 수 있도록 테스트를 리팩터링하는 것이 좋습니다.
MapInconclusiveToFailed false 테스트가 불충분한 상태로 완료되는 경우 테스트 탐색기에서 건너뛴 상태로 매핑됩니다. 결과가 불충분한 테스트를 실패로 표시하려는 경우 값을 true로 설정합니다.
MapNotRunnableToFailed true 실행할 수 없는 결과가 실패한 테스트에 매핑되는지 여부를 나타내는 값입니다.
클래스에서 이름별 테스트 정렬 false 테스트 탐색기와 명령줄 모두에서 테스트 이름으로 테스트를 실행하려면 이 값을 true설정합니다.
Parallelize 병렬화 설정을 지정하는 데 사용됩니다.

Workers: 병렬화에 사용할 스레드/작업자의 수이며, 기본적으로 현재 컴퓨터의 프로세서 수입니다.

SCOPE: 병렬 처리의 범위입니다. MethodLevel로 설정할 수 있습니다. 기본적으로 ClassLevel입니다.

<Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize>
SettingsFile 여기에서 MSTest 어댑터와 함께 사용할 테스트 설정 파일을 지정할 수 있습니다. 설정 메뉴에서 테스트 설정 파일을 지정할 수도 있습니다.

이 값을 지정하면 ForcedLegacyModetrue로 설정해야 합니다.

<ForcedLegacyMode>true</ForcedLegacyMode>
TestCleanupTimeout 0 테스트 정리 방법의 각 인스턴스에 적용할 제한 시간을 전체적으로 지정합니다. 테스트 정리 메서드에 지정된 [Timeout] 특성은 전역 제한 시간을 재정의합니다.
TestInitializeTimeout 0 테스트 초기화 메서드의 각 인스턴스에 적용할 제한 시간을 전역적으로 지정합니다. 테스트 초기화 메서드에 지정된 [Timeout] 특성은 전역 시간 제한을 재정의합니다.
TestTimeout 0 지정된 전역 테스트 사례 시간 제한을 가져옵니다.
TreatClassAndAssemblyCleanupWarningsAsErrors false 클래스 정리의 실패를 오류로 보려면 이 값을 true로 설정합니다.
TreatDiscoveryWarningsAsErrors false 테스트 검색 경고를 오류로 보고하려면 이 값을 true로 설정합니다.

TestRunParameter 요소

<TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
</TestRunParameters>

테스트 실행 매개 변수를 사용하면 런타임에 테스트에 제공되는 변수와 값을 정의할 수 있습니다. MSTest TestContext.Properties 속성을 사용하여 매개 변수에 액세스합니다.

private string _appUrl;
public TestContext TestContext { get; set; }

[TestMethod]
public void HomePageTest()
{
    string _appUrl = TestContext.Properties["webAppUrl"];
}

테스트 실행 매개 변수를 사용하려면 공용 TestContext 속성을 테스트 클래스에 추가합니다.

예제 .runsettings 파일

다음 XML에는 일반적인 .runsettings 파일의 콘텐츠를 보여 줍니다. 이 코드를 복사하고 필요에 따라 편집합니다.

값에는 기본값이 있으므로 파일의 각 요소는 선택 사항입니다.

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>

  <!-- Parameters used by tests at run time -->
  <TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
    <Parameter name="webAppUserName" value="Admin" />
    <Parameter name="webAppPassword" value="Password" />
  </TestRunParameters>

  <!-- MSTest -->
  <MSTest>
    <MapInconclusiveToFailed>True</MapInconclusiveToFailed>
    <CaptureTraceOutput>false</CaptureTraceOutput>
    <DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
    <DeploymentEnabled>False</DeploymentEnabled>
    <ConsiderFixturesAsSpecialTests>False</ConsiderFixturesAsSpecialTests>
    <AssemblyResolution>
      <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/>
    </AssemblyResolution>
  </MSTest>

</RunSettings>

testconfig.json

MSTest를 사용하여 테스트를 실행하는 경우 testconfig.json 파일을 사용하여 테스트 실행기의 동작을 구성할 수 있습니다. testconfig.json 파일은 테스트 실행기 구성 설정을 포함하는 JSON 파일입니다. 이 파일은 테스트 실행기 및 테스트 실행 환경을 구성하는 데 사용됩니다. 자세한 내용은 Microsoft.Testing.Platform testconfig.json 설명서참조하세요.

MSTest 3.7부터 동일한 구성 파일에서 MSTest 실행을 구성할 수도 있습니다. 다음 섹션에서는 testconfig.json 파일에서 사용할 수 있는 설정에 대해 설명합니다.

MSTest 요소

MSTest 설정은 다음 섹션에서 설명하는 기능별로 그룹화됩니다.

항목 기본값 묘사
클래스 내 테스트 이름순으로 정렬 false 테스트 탐색기와 명령줄 모두에서 테스트 이름으로 테스트를 실행하려면 이 값을 true설정합니다.
다른 어셈블리에서 기본 클래스 테스트 메서드를 사용하도록 설정 true 상속하는 테스트 클래스와 다른 어셈블리의 기본 클래스에서 테스트 메서드를 검색할 수 있는지 여부를 나타내는 값입니다.
classCleanupLifecycle 조립 완료 클래스 정리가 클래스의 끝에서 수행되도록 하려면 endOfClass설정합니다.

AssemblyResolution 설정

항목 기본값 묘사
경로 없음 단위 테스트를 찾아서 실행하는 경우 추가 어셈블리에 대한 경로를 지정할 수 있습니다. 예를 들어 테스트 어셈블리와 동일한 디렉터리에 존재하지 않는 종속성 어셈블리에 대해 이러한 경로를 사용합니다. 셰이프 { "path": "...", "includeSubDirectories": "true/false" }경로를 지정할 수 있습니다.

배포 설정

항목 기본값 묘사
deleteDeploymentDirectoryAfterTestRunIsComplete true 테스트를 실행한 후 배포 디렉터리를 유지하려면 이 값을 false로 설정합니다.
테스트 소스 종속성 배포 true 테스트 원본 참조를 배포할지 여부를 나타냅니다.
활성화됨 true 값을 false로 설정하면 테스트 메서드에서 지정한 배포 항목이 배포 디렉터리에 복사되지 않습니다.

출력 설정

항목 기본값 설명
captureTrace false 현재 실행 중인 테스트에 연결될 Console.Write*, Trace.Write*Debug.Write* API에서 오는 문자 메시지를 캡처합니다.

병렬 처리 설정

항목 기본값 묘사
활성화됨 false 테스트 병렬 처리를 사용하도록 설정합니다.
범위 수업 병렬 처리의 범위입니다. 당신은 method으로 설정할 수 있습니다. 기본값인 class지정된 클래스의 모든 테스트를 순차적으로 실행하지만 여러 클래스를 병렬로 실행하는 데 해당합니다.
노동자 0 병렬화에 사용할 스레드/작업자 수입니다. 기본값은 현재 컴퓨터의 프로세서 수에 매핑됩니다.

실행 설정

항목 기본값 설명
비어 있는 데이터 소스를 결론이 없다고 간주합니다 false true설정하면 빈 데이터 원본이 결정적이지 않은 것으로 간주됩니다.
고정 장치를 특별 테스트로 간주합니다 false Visual Studio 및 Visual Studio Code .trx 로그에서 , , , 개별 항목으로 표시하려면 이 값을 true설정합니다.
불확정 상태를 실패로 매핑 false 테스트가 불충분한 상태로 완료되는 경우 테스트 탐색기에서 건너뛴 상태로 매핑됩니다. 결과가 불충분한 테스트를 실패로 표시하려는 경우 값을 true로 설정합니다.
실행 불가능한 것을 실패로 변경 true 실행할 수 없는 결과가 실패한 테스트에 매핑되는지 여부를 나타내는 값입니다.
treatClassAndAssemblyCleanupWarningsAsErrors false 클래스 정리의 실패를 오류로 보려면 이 값을 true로 설정합니다.
발견 경고를 오류로 처리하기 false 테스트 검색 경고를 오류로 보고하려면 이 값을 true로 설정합니다.

시간 제한 설정

항목 기본값 묘사
조립 정리 0 어셈블리 정리 방법의 각 인스턴스에 적용할 시간 제한을 전체적으로 지정합니다.
어셈블리 초기화 0 어셈블리 초기화 메서드의 각 인스턴스에 적용할 시간 제한을 전역적으로 지정합니다.
클래스 정리 (classCleanup) 0 클래스 정리 메서드의 각 인스턴스에 적용할 제한 시간을 전역적으로 지정합니다.
클래스초기화 0 클래스 초기화 메서드의 각 인스턴스에 적용할 제한 시간을 전역적으로 지정합니다.
테스트 0 전역적으로 테스트 시간 제한을 지정합니다.
testCleanup 0 테스트 정리 방법의 각 인스턴스에 적용할 제한 시간을 전체적으로 지정합니다.
testInitialize 0 테스트 초기화 메서드의 각 인스턴스에 적용할 제한 시간을 전역적으로 지정합니다.
useCooperativeCancellation false true으로 설정하면, 시간 초과 시 MSTest는 CancellationToken의 취소만을 트리거하며, 메서드 관찰을 중지하지는 않습니다. 이 동작은 성능이 더 높지만, 사용자가 모든 경로를 통해 토큰의 흐름을 올바르게 관리해야 합니다.

메모

메서드에 지정된 [Timeout] 특성은 글로벌 타임아웃을 재정의합니다. 예를 들어, [AssemblyCleanup]으로 표시된 메서드의 [Timeout(1000)]이 전역 assemblyCleanup 시간 제한을 재정의합니다.

예제 testconfig.json 파일

다음 JSON은 일반적인 .testconfig.json 파일의 내용을 보여 줍니다. 이 코드를 복사하고 필요에 따라 편집합니다.

값에는 기본값이 있으므로 파일의 각 요소는 선택 사항입니다.

{
  "platformOptions": {
  },
  "mstest": {
    "execution": {
        "mapInconclusiveToFailed" : true,
        "disableAppDomain": true,
        "considerFixturesAsSpecialTests" : false,
    },
    "parallelism" : {
        "enabled": true,
        "scope": "method",
    },
    "output": {
        "captureTrace": false
    }
  }
}