.runsettings 파일을 사용하여 단위 테스트 구성

.runsettings 파일을 사용하여 단위 테스트를 실행하는 방법을 구성할 수 있습니다. 예를 들어, 테스트가 실행되는 .NET 버전, 테스트 결과 디렉터리 또는 테스트 실행 중에 수집되는 데이터를 변경하는 데 사용할 수 있습니다. .runsettings 파일은 코드 검사 분석을 사용자 지정하는 데 자주 사용됩니다.

Runsettings 파일을 사용하면 Azure Test Plans 또는 Azure DevOps Server(이전의 TFS(Team Foundation Server))를 통해 명령줄, IDE 또는 빌드 워크플로에서 실행되는 테스트를 구성할 수 있습니다.

Runsettings 파일은 선택 사항입니다. 특별한 구성이 필요하지 않으면 .runsettings 파일이 필요하지 않습니다.

실행 설정 파일 만들기 및 사용자 지정

  1. 실행 설정 파일을 솔루션에 추가합니다. 솔루션 탐색기의 솔루션 바로 가기 메뉴에서 추가>새 항목, XML File을 차례로 선택합니다. 파일을 test.runsettings 등의 이름으로 저장합니다.

    모든 항목 템플릿이 표시되지 않으면 모든 템플릿 표시를 선택한 다음 항목 템플릿을 선택합니다.

    확장명으로 .runsettings를 사용하면 파일 이름은 아무런 상관이 없습니다.

  2. 예제 *.runsettings 파일에서 콘텐츠를 추가하고, 이후 섹션의 설명에 따라 요구 사항에 맞게 사용자 지정합니다.

  3. 다음 방법 중 하나를 사용하여 원하는 *.runsettings 파일을 지정합니다.

  4. 사용자 지정 실행 설정을 사용하는 단위 테스트를 실행합니다.

IDE에서 사용자 지정 설정을 끄고 켜려는 경우 테스트 메뉴에서 파일을 선택 취소하거나 선택합니다.

솔루션에서 .runsettings 파일을 둘 이상 만들고, 필요에 따라 활성 테스트 설정 파일로 하나를 선택할 수 있습니다.

IDE에서 실행 설정 파일 지정

사용 가능한 메서드는 Visual Studio 버전에 따라 다릅니다.

Visual Studio 2019 버전 16.4 이상

Visual Studio 2019 버전 16.4 이상에서 실행 설정 파일을 지정하는 세 가지 방법은 다음과 같습니다.

실행 설정 파일 자동 검색

참고

이는 .runsettings 파일에 대해서만 작동합니다.

실행 설정 파일을 자동 검색하려면 솔루션 루트에 저장합니다.

실행 설정 파일의 자동 검색을 사용하도록 설정하면 이 파일의 설정이 모든 테스트 실행에 적용됩니다. 다음 두 가지 방법을 사용하여 runsettings 파일 자동 검색을 켤 수 있습니다.

  • 도구>옵션>테스트>runsettings 파일 자동 검색 선택

    Visual Studio의 runsettings 파일 자동 검색 옵션

  • 테스트>실행 설정 구성>runsettings 파일 자동 검색 선택

    Visual Studio의 runsettings 파일 자동 검색 메뉴

실행 설정 파일 수동 선택

IDE에서는 테스트>실행 설정 구성>솔루션 전체의 runsettings 파일 선택을 선택한 후 .runsettings 파일을 선택합니다.

  • 이 파일은 솔루션 루트에 있는 .runsettings 파일(있는 경우)을 재정의하며 모든 테스트 실행에 적용됩니다.
  • 이 파일 선택은 로컬에서만 지속됩니다.

Visual Studio의 테스트 솔루션 전체 runsettings 파일 메뉴 선택

빌드 속성 설정

프로젝트 파일 또는 Directory.Build.props 파일을 통해 프로젝트에 빌드 속성을 추가합니다. 프로젝트의 실행 설정 파일은 RunSettingsFilePath 속성을 통해 지정됩니다.

  • 프로젝트 수준 실행 설정은 현재 C#, VB, C++ 및 F# 프로젝트에서 지원됩니다.
  • 프로젝트에 지정된 파일이 솔루션에 지정된 다른 실행 설정 파일을 재정의합니다.
  • 이 MSBuild 속성을 사용하여 runsettings 파일 경로를 지정할 수 있습니다.

프로젝트에 대한 .runsettings 파일을 지정하는 예제:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <RunSettingsFilePath>$(MSBuildProjectDirectory)\example.runsettings</RunSettingsFilePath>
  </PropertyGroup>
  ...
</Project>

Visual Studio 2019 버전 16.3 이하

IDE에서 실행 설정 파일을 지정하려면 테스트>테스트 설정 파일 선택을 선택합니다. .runsettings 파일을 찾아 선택합니다.

Visual Studio 2019에서 테스트 설정 파일 메뉴 선택

테스트 메뉴에 파일이 나타나고 해당 파일을 선택 또는 선택 취소할 수 있습니다. 파일이 선택된 상태에서 코드 검사 분석을 사용할 때마다 실행 설정 파일이 적용됩니다.

명령줄에서 실행 설정 파일 지정

명령줄에서 테스트를 실행하려면 vstest.console.exe를 사용하고, /Settings 매개 변수를 통해 설정 파일을 지정합니다.

  1. Visual Studio용 개발자 명령 프롬프트를 엽니다.

  2. 다음과 유사한 명령을 입력합니다.

    vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage /Settings:CodeCoverage.runsettings
    

    또는

    vstest.console.exe --settings:test.runsettings test.dll
    

자세한 내용은 MSTest.exe 명령줄 옵션을 참조하세요.

*.runsettings 파일

*.runsettings 파일은 RunSettings 요소 내에 다양한 구성 요소를 포함하는 XML 파일입니다. 다음 섹션에서는 여러 요소에 대해 자세히 설명합니다. 전체 샘플은 예제 *.runsettings 파일을 참조하세요.

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <!-- configuration elements -->
</RunSettings>

각 구성 요소는 기본값이 있으므로 선택 사항입니다.

RunConfiguration 요소

<RunConfiguration>
    <MaxCpuCount>1</MaxCpuCount>
    <ResultsDirectory>.\TestResults</ResultsDirectory>
    <TargetPlatform>x86</TargetPlatform>
    <TargetFrameworkVersion>net6.0</TargetFrameworkVersion>
    <TestAdaptersPaths>%SystemDrive%\Temp\foo;%SystemDrive%\Temp\bar</TestAdaptersPaths>
    <TestCaseFilter>(TestCategory != Integration) &amp; (TestCategory != UnfinishedFeature)</TestCaseFilter>
    <TestSessionTimeout>10000</TestSessionTimeout>
    <TreatNoTestsAsError>true</TreatNoTestsAsError>
</RunConfiguration>

RunConfiguration 요소는 다음과 같은 요소를 포함할 수 있습니다.

노드 기본값
MaxCpuCount 1 옵션 이름은 대/소문자를 구분하며 MaxCPUCount로 쉽게 잘못 입력할 수 있습니다.

이 설정은 프로세스 수준에서 병렬 처리 수준을 제어합니다. 최대 프로세스 수준 병렬 처리를 사용하려면 0을 사용합니다.

이 설정은 테스트 DLL의 최대 수 또는 병렬로 실행할 수 있는 다른 테스트 컨테이너를 결정합니다. 각 DLL은 자체 testhost 프로세스에서 실행되며 다른 테스트 DLL의 테스트와 프로세스 수준에서 격리됩니다. 이 설정은 각 테스트 DLL의 테스트를 병렬로 실행하도록 강제하지 않습니다. 스레드 수준의 DLL 내에서 병렬 실행을 제어하는 것은 MSTest, XUnit 또는 NUnit과 같은 테스트 프레임워크에 달려 있습니다.

기본값은 1이며, 이는 하나의 testhost만 동시에 실행됨을 의미합니다. 특수 값 0을 사용하면 논리 프로세서가 있는 만큼 많은 testhost를 사용할 수 있습니다(예: 다중 스레딩이 없는 물리적 코어가 6개인 컴퓨터의 경우 6개, 다중 스레딩이 있는 물리적 코어가 6개인 컴퓨터의 경우 12개).

실행 중인 고유 DLL의 양에 따라 시작된 실제 testhost 수가 결정됩니다.
ResultsDirectory 테스트 결과가 배치될 디렉터리입니다. 경로는 .runsettings 파일을 포함하는 디렉터리를 기준으로 합니다.
TargetFrameworkVersion net40 또는 netcoreapp1.0 자동 검색을 위해 이 전체 태그를 생략합니다.

이 설정은 테스트를 실행하는 데 사용할 프레임워크 버전 또는 프레임워크 패밀리를 정의합니다.

허용되는 값은 net48, net472, net6.0, net5.0, netcoreapp3.1, uap10.0 등의 프레임워크 모니커 또는 유효한 전체 프레임워크 이름(예: .NETFramework,Version=v4.7.2 또는 .NETCoreApp,Version=v6.0.0)입니다. 이전 버전과의 호환성을 위해 Framework35, Framework40, Framework45, FrameworkCore10, FrameworkUap10을 허용합니다(각각 net35, net40, net45, netcoreapp1.0uap10.0을 의미). 모든 값은 대/소문자를 구분하지 않습니다.

제공된 값은 사용할 테스트 런타임 공급자를 결정하는 데 사용됩니다. 모든 테스트 런타임 공급자는 사용할 프레임워크 패밀리를 준수해야 하지만 정확한 프레임워크 버전을 준수하지 못할 수도 있습니다.

.NET Framework 4.5.1~4.8의 경우 지정된 정확한 버전으로 빌드된 testhost가 사용됩니다. 해당 범위를 벗어난 값의 경우 .NET Framework 4.5.1 testhost가 사용됩니다.

.NET의 경우 테스트 프로젝트의 <TargetFramework>(또는 더 정확하게 runtimeconfig.json)에 따라 실제 버전이 결정됩니다.

UWP의 경우 테스트 프로젝트 애플리케이션은 그 자체로 testhost이며 사용되는 UWP의 실제 버전을 결정합니다.

.runsettings 파일에서 TargetFrameworkVersion 요소를 생략하여 빌드된 이진 파일에서 프레임워크 버전을 자동으로 확인합니다.

자동 검색 시 모든 대상 프레임워크는 단일 공통 프레임워크로 통합됩니다. 동일한 대상 프레임워크 제품군의 다른 버전이 발견되면 최신 버전(예: net452, net472, net48 = net48)이 선택됩니다.

.NET Framework 실행기(Visual Studio 또는 개발자 명령줄의 vstest.console.exe)의 경우 공통 대상 프레임워크는 net40입니다. .NET Runner(dotnet test + DLL)의 경우 공통 대상 프레임워크는 netcoreapp1.0으로 설정됩니다.
TargetPlatform x86 자동 검색을 위해 이 전체 태그를 생략합니다.

이 설정은 테스트를 실행하는 데 사용할 아키텍처를 정의합니다. 가능한 값은 x86, x64, ARM, ARM64, S390x입니다.

자동 검색 시 AnyCPU DLL의 아키텍처는 실행기에 따라 다를 수 있습니다. .NET Framework 실행기(Visual Studio 또는 개발자 명령줄의 vstest.console.exe)의 경우 기본값은 x86입니다. .NET Runner(dotnet test)의 경우 기본값은 현재 프로세스 아키텍처입니다.

TreatTestAdapterErrorsAsWarnings false false, true
TestAdaptersPaths TestAdapters가 있는 디렉터리에 대한 하나 이상의 경로
TestCaseFilter 형식 <속성><연산자><값>의 필터 식[|&<식>]입니다. 부울 연산자 &는 HTML 엔터티 &로 표시되어야 합니다. 식은 괄호로 묶을 수 있습니다. 식 구조에 대한 자세한 구문은 vstest/docs/filter.md를 참조하세요.
TestSessionTimeout 사용자가 지정된 시간 제한을 초과하는 테스트 세션을 종료할 수 있도록 합니다. 시간 제한을 설정하면 리소스가 효율적으로 사용되고 테스트 세션이 설정된 시간으로 제한됩니다. 이 설정은 Visual Studio 2017 버전 15.5 이상에서 사용할 수 있습니다.
DotnetHostPath testhost를 실행하는 데 사용되는 dotnet 호스트의 사용자 지정 경로를 지정합니다. dotnet/runtime 리포지토리를 빌드하는 경우와 같이 사용자 자체 dotnet을 빌드할 때 유용합니다. 이 옵션을 지정하면 testhost.exe 찾기를 건너뛰고 testhost.dll을 강제로 사용합니다.
TreatNoTestsAsError false true 또는 false
테스트가 검색되지 않는 경우 종료 코드를 정의하는 부울 값을 지정합니다. 값이 true이고 테스트가 검색되지 않으면 0이 아닌 종료 코드가 반환됩니다. 그렇지 않으면 0이 반환됩니다.

DataCollectors 요소(진단 데이터 어댑터)

DataCollectors 요소는 진단 데이터 어댑터의 설정을 지정합니다. 진단 데이터 어댑터는 테스트 환경 및 애플리케이션에 대한 추가 정보를 수집합니다. 각 어댑터에는 기본 설정이 있으며 기본 설정을 사용하지 않으려는 경우에만 설정을 제공해야 합니다.

<DataCollectionRunSettings>
  <DataCollectors>
    <!-- data collectors -->
  </DataCollectors>
</DataCollectionRunSettings>

CodeCoverage 데이터 수집기

코드 검사 데이터 수집기는 테스트에서 애플리케이션 코드 중 실행된 부분에 대한 로그를 만듭니다. 코드 검사 설정을 사용자 지정하는 방법에 대한 자세한 내용은 코드 검사 분석 사용자 지정을 참조하세요.

<DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <Configuration>
    <CodeCoverage>
      <ModulePaths>
        <Exclude>
          <ModulePath>.*CPPUnitTestFramework.*</ModulePath>
        </Exclude>
      </ModulePaths>

      <UseVerifiableInstrumentation>True</UseVerifiableInstrumentation>
      <AllowLowIntegrityProcesses>True</AllowLowIntegrityProcesses>
      <CollectFromChildProcesses>True</CollectFromChildProcesses>
      <CollectAspDotNet>False</CollectAspDotNet>
    </CodeCoverage>
  </Configuration>
</DataCollector>

VideoRecorder 데이터 수집기

비디오 데이터 수집기는 테스트를 실행할 때 기록되는 화면을 캡처합니다. 이 기록은 UI 테스트 문제 해결에 유용합니다. 비디오 데이터 수집기는 Visual Studio 2017 버전 15.5 이상에서 제공됩니다. 이 데이터 수집기를 구성하는 방법의 예제는 예제 *.runsettings 파일을 참조하세요.

다른 형식의 진단 데이터 어댑터를 사용자 지정하려면 테스트 설정 파일을 사용합니다.

원인 데이터 수집기

이 옵션을 사용하여 테스트 호스트 크래시가 발생하는 문제가 있는 테스트를 격리할 수 있습니다. 수집기를 실행하면 크래시가 발생하기 전에 테스트 실행 순서를 캡처하는 TestResults의 출력 파일(Sequence.xml)이 만들어집니다.

원인은 세 가지 모드로 실행할 수 있습니다.

  • 시퀀스 파일 모드: 최대 중단까지 테스트 목록을 사용하여 파일 생성
  • 크래시 덤프 모드: testhost가 충돌할 때 덤프 생성
  • 중단 덤프 모드: 지정된 시간 제한 안에 테스트가 완료되지 않은 경우 덤프 생성

XML 구성은 <RunSettings> 노드에 바로 배치되어야 합니다.

<RunSettings>
  <RunConfiguration>
  </RunConfiguration>
  <LoggerRunSettings>
    <Loggers>
      <Logger friendlyName="blame" enabled="True" />
    </Loggers>
  </LoggerRunSettings>
  <DataCollectionRunSettings>
    <DataCollectors>
      <!-- Enables blame -->
      <DataCollector friendlyName="blame" enabled="True">
        <Configuration>
          <!-- Enables crash dump, with dump type "Full" or "Mini".
          Requires ProcDump in PATH for .NET Framework. -->
          <CollectDump DumpType="Full" />
          <!-- Enables hang dump or testhost and its child processes 
          when a test hangs for more than 10 minutes. 
          Dump type "Full", "Mini" or "None" (just kill the processes). -->
          <CollectDumpOnTestSessionHang TestTimeout="10min" HangDumpType="Full" />
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

TestRunParameters

<TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
    <Parameter name="docsUrl" value="https://learn.microsoft.com" />
</TestRunParameters>

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

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

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

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

LoggerRunSettings 요소

LoggerRunSettings 섹션은 테스트 실행에 사용할 로거를 하나 이상 정의합니다. 가장 일반적인 로거는 콘솔, Visual Studio 테스트 결과 파일(trx), html입니다.

<LoggerRunSettings>
    <Loggers>
      <Logger friendlyName="console" enabled="True">
        <Configuration>
            <Verbosity>quiet</Verbosity>
        </Configuration>
      </Logger>
      <Logger friendlyName="trx" enabled="True">
        <Configuration>
          <LogFileName>foo.trx</LogFileName>
        </Configuration>
      </Logger>
      <Logger friendlyName="html" enabled="True">
        <Configuration>
          <LogFileName>foo.html</LogFileName>
        </Configuration>
      </Logger>
    </Loggers>
  </LoggerRunSettings>

MSTest 요소

이러한 설정은 TestMethodAttribute 특성을 가진 테스트 메서드를 실행하는 테스트 어댑터에 따라 달라집니다.

<MSTest>
    <MapInconclusiveToFailed>True</MapInconclusiveToFailed>
    <CaptureTraceOutput>false</CaptureTraceOutput>
    <DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
    <DeploymentEnabled>False</DeploymentEnabled>
    <AssemblyResolution>
      <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/>
    </AssemblyResolution>
</MSTest>
구성 기본값
ForcedLegacyMode false 이전 버전의 Visual Studio에서 MSTest 어댑터는 더욱 빠르고 확장성 가능하도록 최적화되었습니다. 테스트가 실행되는 순서와 같은 일부 동작은 이전 버전 Visual Studio처럼 정확하지 않을 수 있습니다. 이전 테스트 어댑터를 사용하려면 값을 true로 설정합니다.

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

새 어댑터를 사용할 수 있도록 테스트를 리팩터링하는 것이 좋습니다.
SettingsFile 여기에서 MSTest 어댑터와 함께 사용할 테스트 설정 파일을 지정할 수 있습니다. 설정 메뉴에서 테스트 설정 파일을 지정할 수도 있습니다.

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

<ForcedLegacyMode>true</ForcedLegacyMode>
DeploymentEnabled true 값을 false로 설정할 경우 테스트 메서드에서 지정한 배포 항목이 배포 디렉터리로 복사되지 않습니다.
CaptureTraceOutput true 현재 실행 중인 테스트에 연결될 Console.Write*, Trace.Write*, Debug.Write* api에서 오는 문자 메시지를 캡처합니다.
EnableBaseClassTestMethodsFromOtherAssemblies true 상속하는 테스트 클래스와 다른 어셈블리의 기본 클래스에서 테스트 메서드를 검색할 수 있는지 여부를 나타내는 값입니다.
ClassCleanupLifecycle EndOfClass 어셈블리 끝에서 클래스 정리가 수행되도록 하려면 EndOfAssembly로 설정합니다. (EndOfClass가 기본값이므로 MSTest v4부터 더 이상 지원되지 않으며 ClassCleanup 동작만 해당)
MapNotRunnableToFailed true 실행할 수 없는 결과가 실패한 테스트에 매핑되는지 여부를 나타내는 값입니다.
Parallelize 병렬화 설정을 지정하는 데 사용됩니다.

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

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

<Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize>
TestTimeout 0 지정된 전역 테스트 사례 시간 제한을 가져옵니다.
TreatDiscoveryWarningsAsErrors false 테스트 검색 경고를 오류로 보고하려면 이 값을 true로 설정합니다.
TreatClassAndAssemblyCleanupWarningsAsErrors false 클래스 정리의 실패를 오류로 보려면 이 값을 true로 설정합니다.
DeployTestSourceDependencies true 테스트 원본 참조를 배포할지 여부를 나타내는 값입니다.
DeleteDeploymentDirectoryAfterTestRunIsComplete true 테스트를 실행한 후 배포 디렉터리를 유지하려면 이 값을 false로 설정합니다.
MapInconclusiveToFailed false 테스트가 불충분한 상태로 완료되는 경우 테스트 탐색기에서 건너뛴 상태로 매핑됩니다. 결과가 불충분한 테스트를 실패로 표시하려는 경우 값을 true로 설정합니다.
AssemblyResolution false 단위 테스트를 찾아서 실행하는 경우 추가 어셈블리에 대한 경로를 지정할 수 있습니다. 예를 들어 테스트 어셈블리와 동일한 디렉터리에 존재하지 않는 종속성 어셈블리에 대해 이러한 경로를 사용합니다. 경로를 지정하려면 디렉터리 경로 요소를 사용합니다. 경로는 환경 변수를 포함할 수 있습니다.

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

이 기능은 .NET Framework 대상을 사용하는 경우에만 적용됩니다.

예제 .runsettings 파일

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

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

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <!-- Configurations that affect the Test Framework -->
  <RunConfiguration>
    <!-- Use 0 for maximum process-level parallelization. This does not force parallelization within the test DLL (on the thread-level). You can also change it from the Test menu; choose "Run tests in parallel". Unchecked = 1 (only 1), checked = 0 (max). -->
    <MaxCpuCount>1</MaxCpuCount>
    <!-- Path relative to directory that contains .runsettings file-->
    <ResultsDirectory>.\TestResults</ResultsDirectory>

    <!-- Omit the whole tag for auto-detection. -->
    <!-- [x86] or x64, ARM, ARM64, s390x  -->
    <!-- You can also change it from the Test menu; choose "Processor Architecture for AnyCPU Projects" -->
    <TargetPlatform>x86</TargetPlatform>

    <!-- Any TargetFramework moniker or omit the whole tag for auto-detection. -->
    <!-- net48, [net40], net6.0, net5.0, netcoreapp3.1, uap10.0 etc. -->
    <TargetFrameworkVersion>net40</TargetFrameworkVersion>

    <!-- Path to Test Adapters -->
    <TestAdaptersPaths>%SystemDrive%\Temp\foo;%SystemDrive%\Temp\bar</TestAdaptersPaths>

    <!-- TestCaseFilter expression -->
    <TestCaseFilter>(TestCategory != Integration) &amp; (TestCategory != UnfinishedFeature)</TestCaseFilter>

    <!-- TestSessionTimeout was introduced in Visual Studio 2017 version 15.5 -->
    <!-- Specify timeout in milliseconds. A valid value should be greater than 0 -->
    <TestSessionTimeout>10000</TestSessionTimeout>

    <!-- true or false -->
    <!-- Value that specifies the exit code when no tests are discovered -->
    <TreatNoTestsAsError>true</TreatNoTestsAsError>
  </RunConfiguration>

  <!-- Configurations for data collectors -->
  <DataCollectionRunSettings>
    <DataCollectors>
      <DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
        <Configuration>
          <CodeCoverage>
            <ModulePaths>
              <Exclude>
                <ModulePath>.*CPPUnitTestFramework.*</ModulePath>
              </Exclude>
            </ModulePaths>

            <!-- We recommend you do not change the following values: -->
            <UseVerifiableInstrumentation>True</UseVerifiableInstrumentation>
            <AllowLowIntegrityProcesses>True</AllowLowIntegrityProcesses>
            <CollectFromChildProcesses>True</CollectFromChildProcesses>
            <CollectAspDotNet>False</CollectAspDotNet>

          </CodeCoverage>
        </Configuration>
      </DataCollector>

      <DataCollector uri="datacollector://microsoft/VideoRecorder/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.DataCollection.VideoRecorder.VideoRecorderDataCollector, Microsoft.VisualStudio.TestTools.DataCollection.VideoRecorder, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Screen and Voice Recorder">
        <!--Video data collector was introduced in Visual Studio 2017 version 15.5 -->
        <Configuration>
          <!-- Set "sendRecordedMediaForPassedTestCase" to "false" to add video attachments to failed tests only -->
          <MediaRecorder sendRecordedMediaForPassedTestCase="true"  xmlns="">           ​
            <ScreenCaptureVideo bitRate="512" frameRate="2" quality="20" />​
          </MediaRecorder>​
        </Configuration>
      </DataCollector>

      <!-- Configuration for blame data collector -->
      <DataCollector friendlyName="blame" enabled="True">
      </DataCollector>

    </DataCollectors>
  </DataCollectionRunSettings>

  <!-- 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>

  <!-- Configuration for loggers -->
  <LoggerRunSettings>
    <Loggers>
      <Logger friendlyName="console" enabled="True">
        <Configuration>
            <Verbosity>quiet</Verbosity>
        </Configuration>
      </Logger>
      <Logger friendlyName="trx" enabled="True">
        <Configuration>
          <LogFileName>foo.trx</LogFileName>
        </Configuration>
      </Logger>
      <Logger friendlyName="html" enabled="True">
        <Configuration>
          <LogFileName>foo.html</LogFileName>
        </Configuration>
      </Logger>
      <Logger friendlyName="blame" enabled="True" />
    </Loggers>
  </LoggerRunSettings>

  <!-- Adapter Specific sections -->

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

</RunSettings>

.runsettings 파일에서 환경 변수를 지정합니다.

환경 변수는 테스트 호스트와 직접 상호 작용할 수 있는 .runsettings 파일에서 설정할 수 있습니다. DOTNET_ROOT 같은 환경 변수를 설정해야 하는 중요한 프로젝트를 지원하려면 .runsettings 파일에 환경 변수를 지정해야 합니다. 해당 변수는 테스트 호스트 프로세스를 생성하는 동안 설정되며 호스트에서 사용할 수 있습니다.

예시

다음 코드는 환경 변수를 전달하는 샘플 .runsettings 파일입니다.

<?xml version="1.0" encoding="utf-8"?>
<!-- File name extension must be .runsettings -->
<RunSettings>
  <RunConfiguration>
    <EnvironmentVariables>
      <!-- List of environment variables we want to set-->
      <DOTNET_ROOT>C:\ProgramFiles\dotnet</DOTNET_ROOT>
      <SDK_PATH>C:\Codebase\Sdk</SDK_PATH>
    </EnvironmentVariables>
  </RunConfiguration>
</RunSettings>

RunConfiguration 노드에는 EnvironmentVariables 노드가 포함되어야 합니다. 환경 변수는 요소 이름 및 해당 값으로 지정할 수 있습니다.

참고

테스트 호스트를 시작할 때 항상 해당 환경 변수를 설정해야 하므로 테스트를 항상 별도의 프로세스로 실행해야 합니다. 이를 위해 테스트 호스트가 항상 호출되도록 하는 환경 변수가 있는 경우 /InIsolation 플래그가 지정됩니다.