다음을 통해 공유


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

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

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

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

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

  1. 솔루션에 실행 설정 파일을 추가합니다. 솔루션 탐색기솔루션의 바로 가기 메뉴에서 추가>새 항목선택하고 XML 파일선택합니다. 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
    

자세한 내용은 VSTest.Console.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 수에 따라 시작된 실제 testhosts 수가 결정됩니다.
결과 디렉토리 테스트 결과가 배치되는 디렉터리입니다. 경로는 .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으로 설정됩니다.
타겟플랫폼 x86 이 전체 태그를 생략하여 자동 검색합니다.

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

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

TreatTestAdapterErrorsAsWarnings 거짓 거짓, 참
TestAdaptersPaths TestAdapters가 있는 디렉터리에 대한 하나 이상의 경로
TestCaseFilter 형식 <속성><연산자><값>필터 식 [|&<식>]입니다. 부울 연산자 &는 HTML 엔티티 &로 표시되어야 합니다. 표현식을 괄호로 묶을 수 있습니다. 식 구조에 대한 자세한 구문은 vstest/docs/filter.md 참조하세요.
testSessionTimeout 지정된 시간 제한을 초과하면 사용자가 테스트 세션을 종료할 수 있습니다(밀리초 단위로 지정됨). 시간 제한을 설정하면 리소스가 잘 사용되고 테스트 세션이 설정된 시간으로 제한됩니다. 이 설정은 Visual Studio 2017 버전 15.5 이상에서 사용할 수 있습니다.
dotnetHostPath testhost를 실행하는 데 사용되는 dotnet 호스트에 대한 사용자 지정 경로를 지정합니다. dotnet/런타임 리포지토리를 빌드할 때와 같이 사용자 고유의 dotnet을 빌드할 때 유용합니다. 이 옵션을 지정하면 testhost.exe검색을 건너뛰고 testhost.dll강제로 사용합니다.
TreatNoTestsAsError 거짓 참 또는 거짓
테스트가 검색되지 않을 때 종료 코드를 정의하는 부울 값을 지정합니다. 값이 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>
    <Parameter name="webAppUrl" value="http://localhost" />
    <Parameter name="docsUrl" value="https://learn.microsoft.com" />
</TestRunParameters>

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

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>
    <ConsiderFixturesAsSpecialTests>False</ConsiderFixturesAsSpecialTests>
    <AssemblyResolution>
      <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/>
    </AssemblyResolution>
</MSTest>
구성 기본값 가치
강제유산모드 거짓 이전 버전의 Visual Studio에서 MSTest 어댑터는 더 빠르고 확장성을 높일 수 있도록 최적화되었습니다. 테스트가 실행되는 순서와 같은 일부 동작은 이전 버전의 Visual Studio와 정확히 일치하지 않을 수 있습니다. 이전 테스트 어댑터를 사용하려면 값을 true 설정합니다.

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

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

이 값을 지정하는 경우, ForcedLegacyModetrue로 설정해야 합니다.

<ForcedLegacyMode>true</ForcedLegacyMode>
배포 활성화 값을 false 설정하면 테스트 메서드에서 지정한 배포 항목이 배포 디렉터리에 복사되지 않습니다.
captureTraceOutput 현재 실행 중인 테스트에 연결될 Console.Write*, Trace.Write*, Debug.Write* api에서 오는 문자 메시지를 캡처합니다.
다른 어셈블리에서 기본 클래스 테스트 메서드 사용 가능 진실 상속되는 테스트 클래스와 다른 어셈블리의 기본 클래스에서 테스트 메서드를 검색할 수 있는지 여부를 나타내는 값입니다.
클래스정리수명주기 수업 종료 어셈블리 끝에서 클래스 정리가 수행되도록 하려면 endOfAssembly 설정합니다. (MSTest v4부터 더 이상 지원되지 않으며, EndOfClass가 기본값이고 ClassCleanup이 유일한 동작입니다)
MapNotRunnableToFailed 실행 불가능한 결과가 실패한 테스트에 매핑되는지 여부를 나타내는 값입니다.
병렬화 병렬화 설정을 설정하는 데 사용됩니다.

작업자: 병렬 처리에 사용할 스레드/작업자의 수로, 기본적으로 현재 컴퓨터의 프로세서 수 가 됩니다.

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

<Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize>
TestTimeout 0 지정된 전역 테스트 케이스의 시간 제한을 가져옵니다.
TreatDiscoveryWarningsAsErrors 거짓 테스트 검색 경고를 오류로 보고하려면 이 값을 true 설정합니다.
TreatClassAndAssemblyCleanupWarningsAsErrors 거짓 클래스 정리에서 실패를 오류로 보려면 이 값을 true로 설정합니다.
DeployTestSourceDependencies 진실 테스트 원본 참조를 배포할지 여부를 나타내는 값입니다.
DeleteDeploymentDirectoryAfterTestRunIsComplete 참(true) 테스트 실행 후 배포 디렉터리를 유지하려면 이 값을 false 설정합니다.
MapInconclusiveToFailed 거짓 테스트가 결정적이지 않은 상태로 완료되면 테스트 탐색기에서건너뛴 상태로 매핑됩니다. 결정적이지 않은 테스트를 실패로 표시하려면 값을 true 설정합니다.
ConsiderFixturesAsSpecialTests 거짓 Visual Studio 및 Visual Studio Code의 Test Explorer.trx 로그에서 AssemblyInitialize, AssemblyCleanup, ClassInitialize, ClassCleanup을(를) 개별 항목으로 표시하려면 이 값을 "true"로 설정하십시오 .
총회결의 거짓 단위 테스트를 찾고 실행할 때 추가 어셈블리의 경로를 지정할 수 있습니다. 예를 들어 테스트 어셈블리와 동일한 디렉터리에 없는 종속성 어셈블리에 대해 이러한 경로를 사용합니다. 경로를 지정하려면 Directory Path 요소를 사용합니다. 경로에는 환경 변수가 포함될 수 있습니다.

<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 파일에서 설정할 수 있습니다. .runsettings 파일에서 환경 변수를 지정하는 것은 DOTNET_ROOT같은 환경 변수를 설정해야 하는 사소한 프로젝트를 지원해야 합니다. 이러한 변수는 테스트 호스트 프로세스를 생성하는 동안 설정되며 호스트에서 사용할 수 있습니다.

본보기

다음은 환경 변수를 전달하는 샘플 .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 플래그가 설정됩니다.