다음을 통해 공유


VSTest에서 Microsoft.Testing.Platform으로 마이그레이션

이 문서에서는 VSTest에서 Microsoft.Testing.Platform으로 마이그레이션하는 방법을 알아봅니다.

Microsoft.Testing.Platform을 사용하도록 동의하다

마이그레이션의 첫 번째 단계는 Microsoft.Testing.Platform 사용을 옵트인하는 것입니다.

모든 테스트 프레임워크에 대해, 솔루션의 모든 테스트 프로젝트에 <OutputType>Exe</OutputType>를 추가합니다. 그런 다음 프레임워크별 지침을 따릅니다.

MSTest (테스트 프레임워크)

Microsoft.Testing.Platform은 3.2.0부터 MSTest에서 지원됩니다. 그러나 사용 가능한 최신 MSTest 버전으로 업데이트하는 것이 좋습니다.

옵트인하려면 Directory.Build.props 파일의PropertyGroup 아래에 <EnableMSTestRunner>true</EnableMSTestRunner>을 추가하세요.

비고

MSTest.Sdk를 사용하는 경우 지정하지 않는 한 <UseVSTest>true</UseVSTest> Microsoft.Testing.Platform이 기본적으로 사용됩니다.

NUnit

Microsoft.Testing.Platform은 5.0.0부터 NUnit3TestAdapter에서 지원됩니다.

옵트인하려면 Directory.Build.props 파일의 PropertyGroup 아래에 <EnableNUnitRunner>true</EnableNUnitRunner> 을(를) 추가하십시오.

xUnit.net

Microsoft.Testing.Platform은 xunit.v3부터 지원됩니다.

파일 Directory.Build.props에서, PropertyGroup 아래에 <UseMicrosoftTestingPlatformRunner>true</UseMicrosoftTestingPlatformRunner>을(를) 추가하여 옵트인하십시오.

dotnet test

.NET 9 SDK 및 이전 버전에 대한 옵트인

.NET 9 SDK 및 이전 버전에서는 Microsoft.Testing.Platform for에 대한 dotnet test 지원이 없습니다. 지원은 VSTest 인프라를 기반으로 합니다. 이를 사용하려면 Directory.Build.props 파일의 PropertyGroup 아래에 <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>를 추가하세요.

중요합니다

이 모드에서 Microsoft.Testing.Platform을 지원하려면, 새로운 플랫폼 인수와 기존 인수를 구분하기 위해 --를 추가해야 합니다. 예: dotnet test --no-build -- --list-tests.

.NET 10 SDK 및 이후 버전에 대한 참여

.NET 10 SDK부터 Microsoft.Testing.Platform에 대한 기본 지원이 있습니다. 이를 사용하려면 테스트 실행기를 Microsoft.Testing.Platform같이 지정해야 합니다.

{
  "test": {
    "runner": "Microsoft.Testing.Platform"
  }
}

중요합니다

이 모드에서는 추가 -- 가 더 이상 사용되지 않습니다.

호출 업데이트 dotnet test

명령줄 옵션은 dotnet test 빌드 관련 인수와 테스트 관련 인수의 두 가지 범주로 나뉩니다.

빌드 관련 인수는 테스트 플랫폼과 관련이 없기 때문에 새 플랫폼에 대해 업데이트할 필요가 없습니다. 빌드 관련 인수는 다음과 같습니다.

  • -a|--arch <ARCHITECTURE>
  • --artifacts-path <ARTIFACTS_DIR>
  • -c|--configuration <CONFIGURATION>
  • -f|--framework <FRAMEWORK>
  • -e|--environment <NAME="VALUE">
  • --interactive
  • --no-build
  • --nologo
  • --no-restore
  • -o|--output <OUTPUT_DIRECTORY>
  • --os <OS>
  • -r|--runtime <RUNTIME_IDENTIFIER>
  • -v|--verbosity <LEVEL>

테스트 관련 인수는 VSTest에 따라 달라지므로 새 플랫폼에 맞게 변환해야 합니다. 다음 표에서는 VSTest 인수와 새 플랫폼 간의 매핑을 보여줍니다.

VSTest 인수 새 플랫폼 인자
--test-adapter-path <ADAPTER_PATH> Microsoft.Testing.Platform과 관련이 없음
--blame Microsoft.Testing.Platform과 관련이 없음
--blame-crash --crashdump (크래시 덤프 확장 기능이 필요합니다)
--blame-crash-dump-type <DUMP_TYPE> --crashdump-type (크래시 덤프 확장이 필요)
--blame-crash-collect-always 지원되지 않음
--blame-hang --hangdump ( 중단 덤프 확장 필요)
--blame-hang-dump-type <DUMP_TYPE> --hangdump-type ( 중단 덤프 확장 필요)
--blame-hang-timeout <TIMESPAN> --hangdump-timeout ( 중단 덤프 확장 필요)
--collect <DATA_COLLECTOR_NAME> 데이터 수집기 종속성
-d\|--diag <LOG_FILE> --diagnostic
--filter <EXPRESSION> 선택한 테스트 프레임워크에 따라 다름
-l\|--logger <LOGGER> 로거에 따라 다름
--results-directory <RESULTS_DIR> --results-directory <RESULTS_DIR>
-s\|--settings <SETTINGS_FILE> 선택한 테스트 프레임워크에 따라 다름
-t\|--list-tests --list-tests
-- <RunSettings arguments> --test-parameter ( VSTestBridge에서 제공)

--collect

--collect 는 모든 데이터 수집기의 VSTest에서 일반적인 확장성 지점입니다. Microsoft.Testing.Platform의 확장성 모델은 다르며 모든 데이터 수집기에서 사용할 중앙 집중식 인수는 없습니다. Microsoft.Testing.Platform을 사용하면 각 데이터 수집기에서 고유한 명령줄 옵션을 추가할 수 있습니다. 예를 들어 VSTest를 통해 Microsoft CodeCoverage를 실행하는 것은 다음과 유사할 수 있습니다.

dotnet test --collect "Code Coverage;Format=cobertura"

Microsoft.Testing.Platform을 사용하면 다음과 같이 됩니다.

dotnet test --coverage --coverage-output-format cobertura

중요합니다

앞에서 설명한 대로 VSTest 기반 dotnet test과 함께 Microsoft.Testing.Platform을 사용하는 경우 인수를 플랫폼에 전달하기 전에 추가 -- 작업이 필요합니다. 그래서 이는 dotnet test -- --coverage --coverage-output-format cobertura가 됩니다.

--filter

--filter 는 VSTest 기반 필터입니다.

MSTest 및 NUnit은 Microsoft.Testing.Platform을 사용하여 실행하는 경우에도 동일한 필터 형식을 지원합니다.

xUnit.net Microsoft.Testing.Platform을 사용하여 실행할 때 동일한 필터 형식을 지원하지 않습니다. VSTest 기반 필터에서 다음 명령줄 옵션을 사용하여 제공되는 xunit.v3의 새 필터 지원으로 마이그레이션해야 합니다.

xUnit.net 특정 옵션:

  • --filter-class
  • --filter-not-class
  • --filter-method
  • --filter-not-method
  • --filter-namespace
  • --filter-not-namespace
  • --filter-trait
  • --filter-not-trait
  • --filter-query

자세한 내용은 xUnit.net xUnit.net 및 쿼리 필터 언어에 대한Microsoft.Testing.Platform 설명서를 참조하세요.

--logger

일반적으로 VSTest에서 "로거"라고 하는 것을 Microsoft.Testing.Platform에서 "reporter"라고 합니다. Microsoft.Testing.Platform에서 로깅은 진단 목적으로만 명시적으로 사용됩니다.

--collect마찬가지로, --logger 모든 로거(또는 Microsoft.Testing.Platform의 컨텍스트에서 모든 기자)에 대한 VSTest의 일반적인 확장성 지점입니다. 각 Microsoft.Testing.Platform 기자는 자체 명령줄 옵션을 자유롭게 추가할 수 있으므로 VSTest --logger와 같은 중앙 집중식 명령줄 옵션은 없습니다.

매우 일반적으로 사용되는 VSTest 로거 중 하나는 TRX 로거입니다. 이 로거는 일반적으로 다음과 같이 호출됩니다.

dotnet test --logger trx

Microsoft.Testing.Platform을 사용하면 명령이 다음과 같이 됩니다.

dotnet test --report-trx

중요합니다

사용하기 위해서 --report-trx, Microsoft.Testing.Extensions.TrxReport NuGet 패키지가 설치되어 있어야 합니다.

중요합니다

앞에서 설명한 대로 VSTest 기반 dotnet test과 함께 Microsoft.Testing.Platform을 사용하는 경우 인수를 플랫폼에 전달하기 전에 추가 -- 작업이 필요합니다. 그래서, 이것은 된다 dotnet test -- --report-trx.

--settings

VSTest는 --settings 테스트 실행에 대한 RunSettings 파일을 지정하는 데 사용됩니다. RunSettings는 핵심 Microsoft.Testing.Platform에서 지원되지 않으며 최신 testconfig.json 구성 파일로 대체되었습니다. 그러나 MSTest 및 NUnit은 Microsoft.Testing.Platform을 실행할 때 이전 RunSettings를 계속 지원하며 --settings 여전히 지원됩니다.

vstest.console.exe

직접 vstest.console.exe을 사용하는 경우, dotnet test 명령으로 대체할 것을 권장합니다.

테스트 탐색기

Visual Studio 또는 Visual Studio Code 테스트 탐색기를 사용하는 경우 Microsoft.Testing.Platform에 대한 지원을 사용하도록 설정해야 할 수 있습니다.

비주얼 스튜디오

Visual Studio Test Explorer는 버전 17.14부터 Microsoft.Testing.Platform을 지원합니다. 이전 버전을 사용하는 경우 Visual Studio를 최신 버전으로 업데이트해야 할 수 있습니다.

비주얼 스튜디오 코드

C# DevKit을 사용하는 Visual Studio Code는 Microsoft.Testing.Platform을 지원합니다.

Azure DevOps

Azure DevOps 작업을 사용하는 경우 사용하는 작업에 따라 Microsoft.Testing.Platform을 사용하도록 파이프라인을 업데이트해야 할 수 있습니다.

VSTest 작업

Azure DevOps에서 VSTest 작업을 사용하는 경우 .NET Core 작업으로 바꿀 수 있습니다.

.NET Core CLI 작업

  • 사용자 지정 arguments가 작업에 전달된 경우, 마이그레이션 시에는 dotnet test의 지침을 따르십시오.

  • .NET 10 SDK 이상에서 Microsoft.Testing.Platform의 네이티브 환경을 파일을 통해 옵트인하지 않은 상태에서 global.json 작업을 사용하는 경우, 요청된 TRX 보고서와 함께 사용된 결과 디렉터리를 올바르게 가리키도록 작업을 arguments를 설정해야 합니다. 다음은 그 예입니다.

    - task: DotNetCoreCLI@2
      displayName: Run unit tests
      inputs:
        command: 'test'
        arguments: '-- --report-trx --results-directory $(Agent.TempDirectory)