Microsoft.Testing.Platform 개요
Microsoft.Testing.Platform은 CI(연속 통합) 파이프라인, CLI, Visual Studio 테스트 탐색기 및 VS Code 텍스트 탐색기를 포함한 모든 컨텍스트에서 테스트를 실행하기 위한 VSTest의 경량화된 이식 가능한 대안입니다. Microsoft.Testing.Platform은 테스트 프로젝트에 직접 포함되며 테스트를 실행하는 데 필요한 vstest.console
또는 dotnet test
와 같은 다른 앱 종속성은 없습니다.
Microsoft.Testing.Platform
은 오픈 소스입니다. Microsoft.Testing.Platform
코드를 microsoft/testfx GitHub 레포지토리에서 찾을 수 있습니다.
Microsoft.Testing.Platform 핵심 요소
이 새로운 테스트 플랫폼은 .NET 개발자 환경 테스트 팀의 경험을 기반으로 하며 2016년 .NET Core 출시 이후 발생하는 문제를 해결하는 것을 목표로 합니다. .NET Framework와 .NET Core/.NET 간에는 높은 수준의 호환성이 있지만 플러그인 시스템과 .NET 컴파일의 새로운 가능한 폼 팩터와 같은 일부 주요 기능은 현재 VSTest 플랫폼 아키텍처를 사용하여 새로운 런타임 기능을 진화하거나 완전히 지원하기 어렵게 만들었습니다.
새로운 테스트 플랫폼의 진화를 위한 주요 추진 요소는 다음과 같습니다.
결정성: 서로 다른 컨텍스트(로컬, CI)에서 동일한 테스트를 실행하면 동일한 결과가 생성되도록 합니다. 새 런타임은 리플렉션 또는 다른 동적 .NET 런타임 기능을 사용하여 테스트 실행을 조정하지 않습니다.
런타임 투명도: 테스트 런타임은 테스트 프레임워크 코드를 방해하지 않으며, 리플렉션 또는
AssemblyLoadContext
사용자 지정 어셈블리 확인자를 사용하지 않는 것과 같은AppDomain
격리된 컨텍스트를 만들지 않습니다.확장의 컴파일 시간 등록: 테스트 프레임워크 및 In/out-of-process 확장과 같은 확장은 컴파일 시간 동안 등록되어 결정성을 보장하고 불일치를 쉽게 검색할 수 있습니다.
종속성 없음: 플랫폼의 핵심은 지원되는 런타임 이외의 종속성이 없는 단일 .NET 어셈블리
Microsoft.Testing.Platform.dll
입니다.호스트 가능: 테스트 런타임은 모든 .NET 애플리케이션에서 호스트할 수 있습니다. 콘솔 애플리케이션은 일반적으로 테스트를 실행하는 데 사용되지만 모든 유형의 .NET 애플리케이션에서 테스트 애플리케이션을 만들 수 있습니다. 이렇게 하면 제한 사항이 있을 수 있는 디바이스 또는 브라우저와 같은 특수 컨텍스트 내에서 테스트를 실행할 수 있습니다.
모든 .NET 폼 팩터 지원: 네이티브 AOT를 포함하여 현재 및 미래의 .NET 폼 팩터를 지원합니다.
성능: 기본이 아닌 코드로 런타임이 bloating되는 것을 방지하기 위해 기능과 확장 지점 간의 적절한 균형을 찾습니다. 새 테스트 플랫폼은 테스트 실행을 수행하는 방법에 대한 구현 세부 정보를 제공하는 대신 테스트 실행을 "오케스트레이션"하도록 설계되었습니다.
충분히 확장 가능: 새 플랫폼은 런타임 실행의 최대 사용자 지정을 허용하도록 확장성 지점을 기반으로 합니다. 이를 통해 테스트 프로세스 호스트를 구성하고, 테스트 프로세스를 관찰하고, 테스트 호스트 프로세스 내에서 테스트 프레임워크의 정보를 사용할 수 있습니다.
단일 모듈 배포: 호스트 기능 기능을 사용하면 단일 모듈 배포 모델을 사용할 수 있으며, 단일 컴파일 결과를 사용하여 다른 실행 가능한 모듈을 제공할 필요 없이 Out-of-process 및 In-process의 모든 확장성 지점을 지원할 수 있습니다.
지원되는 테스트 프레임워크
- 프로젝트입니다. MSTest에서
Microsoft.Testing.Platform
지원은 MSTest 실행기를 통해 수행됩니다. - NUnit. NUnit에서
Microsoft.Testing.Platform
지원은 NUnit 실행기를 통해 수행됩니다. - xUnit.net: xUnit.net에서
Microsoft.Testing.Platform
지원은 xUnit.net 러너를 통해 수행됩니다. - TUnit:
Microsoft.Testing.Platform
위에 전체 구성되며, 자세한 내용은 TUnit 설명서를 참조하세요.
테스트 실행 및 디버그
Microsoft.Testing.Platform
테스트 프로젝트는 직접 실행(또는 디버깅)할 수 있는 실행 파일로 빌드됩니다. 콘솔이나 명령을 실행하는 추가 테스트는 없습니다. 대부분의 실행 파일에서 일반적인 경우와 같이, 오류가 발생하면 앱이 0이 아닌 종료 코드로 종료됩니다. 알려진 종료 코드에 대한 자세한 내용은 Microsoft.Testing.Platform 종료 코드를 참조하세요.
Important
기본적으로 Microsoft.Testing.Platform
은 원격 분석을 수집합니다. 선택 해제에 대한 자세한 내용 및 옵션은 Microsoft.Testing.Platform 원격 분석을 참조하세요.
dotnet publish
을 사용하여 앱을 직접 실행하는 테스트 프로젝트를 게시하는 것 역시 테스트를 실행하는 한 가지 방법입니다. 예를 들어 ./Contoso.MyTests.exe
를 실행한다고 합니다. 일부 시나리오에서는 실행 파일을 생성하는 데 dotnet build
를 사용할 수도 있지만 네이티브 AOT와 같이 고려해야 할 경계적 사례가 있을 수 있습니다.
dotnet run
사용
dotnet run
명령을 사용하여 테스트 프로젝트를 빌드하고 실행할 수 있습니다. 이는 가끔은 가장 느린 방법이기는 해도 테스트를 실행하는 가장 쉬운 방법입니다. 로컬에서 프로젝트를 편집해 실행하는 경우 dotnet run
을 사용하는 것은 필요시에 해당 테스트 프로젝트를 다시 빌드할 수 있다는 점에서 실용적입니다. dotnet run
역시 현재 폴더에서 프로젝트를 자동으로 찾습니다.
dotnet run --project Contoso.MyTests
dotnet run
관련 자세한 내용은 dotnet run을 참조합니다.
dotnet exec
사용
dotnet exec
또는 dotnet
명령은 이미 빌드된 테스트 프로젝트를 실행(또는 실행)하는 데 사용되며, 이는 애플리케이션을 직접 실행하는 대신 사용됩니다. dotnet exec
에는 빌드된 테스트 프로젝트 dll에 대한 경로가 필요합니다.
dotnet exec Contoso.MyTests.dll
또는
dotnet Contoso.MyTests.dll
참고 항목
테스트 프로젝트 실행 파일(*.exe)에 대한 경로를 제공하면 다음 오류가 발생합니다.
Error:
An assembly specified in the application dependencies manifest
(Contoso.MyTests.deps.json) has already been found but with a different
file extension:
package: 'Contoso.MyTests', version: '1.0.0'
path: 'Contoso.MyTests.dll'
previously found assembly: 'S:\t\Contoso.MyTests\bin\Debug\net8.0\Contoso.MyTests.exe'
dotnet exec
관련 자세한 내용은 dotnet exec를 참조합니다.
dotnet test
사용
Microsoft.Testing.Platform
은 vstest.console.exe
및 dotnet test
와의 호환성 계층을 제공하여 새로운 실행 시나리오를 사용하도록 설정하는 동시에 이전처럼 테스트를 실행할 수 있도록 합니다.
dotnet test Contoso.MyTests.dll
옵션
아래 목록에서는 플랫폼 옵션만 설명합니다. 각 확장이 제공하는 특정 옵션을 보려면 확장 설명서 페이지를 참조하거나 --help
옵션을 사용합니다.
--diagnostic
진단 로깅을 사용하도록 설정합니다. 기본 로그 수준은 Trace
입니다. 파일은 다음과 같은 이름 형식 log_[MMddHHssfff].diag
으로 출력 디렉터리에 기록됩니다.
--diagnostic-filelogger-synchronouswrite
기본 제공 파일 로거가 로그를 동시에 작성하도록 합니다. 로그 항목을 잃지 않으려는 시나리오에 유용합니다(프로세스가 충돌하는 경우). 이렇게 하면 테스트 실행 속도는 확실히 느려집니다.
--diagnostic-output-directory
파일을 지정하지 않은 경우, 진단 로깅의 출력 디렉터리는 기본 TestResults 디렉터리에 생성됩니다.
--diagnostic-output-fileprefix
로그 파일 이름의 접두사입니다. 기본값은 "log_"
입니다.
--diagnostic-verbosity
--diagnostic
스위치를 사용할 때 세부 정보 표시 수준을 정의합니다. 사용 가능한 값은 Trace
, Debug
, Information
, Warning
, Error
, Critical
입니다.
--help
명령을 사용하는 방법에 대한 설명을 출력합니다.
-ignore-exit-code
0이 아닌 일부 종료 코드를 무시하고 0
로 반환할 수 있습니다. 자세한 내용은 특정 종료 코드 무시를 참조하세요.
--info
다음과 같은 .NET 테스트 애플리케이션 관련 고급 정보를 표시합니다.
- 플랫폼.
- 환경입니다.
- 등록된 각 명령줄 공급자(예: 해당 공급자,
name
,version
,description
,options
공급자). - 등록된 각 도구(예: 해당 도구,
command
,name
,version
,description
, 모든 명령줄 공급자).
이 기능은 다양한 확장 버전(또는 플랫폼) 사이에 동일한 명령줄 옵션 또는 사용할 수 있는 옵션 변경 내용을 등록하는 확장을 이해하는 데 사용됩니다.
--list-tests
사용 가능한 테스트를 나열합니다. 테스트는 실행되지 않습니다.
--minimum-expected-tests
실행될 것으로 예상되는 최소 테스트 수를 지정합니다. 기본적으로 하나 이상의 테스트가 실행될 것으로 예상됩니다.
--results-directory
테스트 결과가 배치될 디렉터리입니다. 지정한 디렉터리가 없으면 생성됩니다. 기본값은 TestResults
이며 테스트 애플리케이션을 포함하는 디렉터리에 있습니다.
MSBuild 통합
NuGet 패키지 Microsoft.Testing.Platform.MSBuild는 Microsoft.Testing.Platform
에 대해 MSBuild와 다양한 통합을 제공합니다.
dotnet test
를 지원합니다. 자세한 내용은 dotnet 테스트 통합을 참조하세요.Visual Studio
및Visual Studio Code
테스트 탐색기에 필요한ProjectCapability
를 지원합니다.- 진입점 자동 생성(
Main
메서드). - 구성 파일 자동 생성.
참고 항목
이 통합은 전이적 방식(이 패키지를 참조하는 다른 프로젝트를 참조하는 프로젝트는 패키지를 참조하는 것처럼 동작)으로 작동하며 IsTestingPlatformApplication
MSBuild 속성을 통해 사용하지 않도록 설정할 수 있습니다.
참고 항목
.NET