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 어댑터와 함께 사용할 테스트 설정 파일을 지정할 수 있습니다.
설정 메뉴에서 테스트 설정 파일을 지정할 수도 있습니다. 이 값을 지정하면 ForcedLegacyMode도 true로 설정해야 합니다. <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 |
불확정 상태를 실패로 매핑 | 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
}
}
}
.NET