다음을 통해 공유


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] 특성은 전역 시간 제한을 재정의합니다.
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 실행할 수 없는 결과가 실패한 테스트에 매핑되는지 여부를 나타내는 값입니다.
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로 설정합니다.
ConsiderFixturesAsSpecialTests false AssemblyInitialize, AssemblyCleanup, ClassInitialize, ClassCleanup를 Visual Studio 및 Visual Studio 코드 Test Explorer.trx 로그에 개별 항목으로 표시하려면 이 값을 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>