Microsoft.Testing.Platform은 CI(연속 통합) 파이프라인, CLI, Visual Studio 테스트 탐색기 및 VS Code 테스트 탐색기를 비롯한 모든 컨텍스트에서 테스트를 실행하기 위한 VSTest 대한 가볍고 이식 가능한 대안입니다. Microsoft.Testing.Platform은 테스트 프로젝트에 직접 포함되며 테스트를 실행하는 데 필요한 vstest.console
또는 dotnet test
같은 다른 앱 종속성이 없습니다.
Microsoft.Testing.Platform
오픈 소스입니다.
Microsoft.Testing.Platform
GitHub 리포지토리에서 코드를 찾을 수 있습니다.
Microsoft.Testing.Platform 핵심 요소
이 새로운 테스트 플랫폼은 .NET 개발자 환경 테스트 팀의 경험을 기반으로 하며 2016년 .NET Core 출시 이후 발생하는 문제를 해결하는 것을 목표로 합니다. .NET Framework와 .NET Core/.NET 간에는 높은 수준의 호환성이 있지만 플러그 인 시스템과 .NET 컴파일의 새로운 가능한 폼 팩터와 같은 일부 주요 기능은 현재 VSTest 플랫폼 아키텍처를 사용하여 새로운 런타임 기능을 진화하거나 완전히 지원하는 것이 복잡해졌습니다.
새로운 테스트 플랫폼의 진화를 위한 주요 추진 요소는 다음과 같습니다.
결정성: 다른 컨텍스트(로컬, CI)에서 동일한 테스트를 실행하면 동일한 결과가 생성되도록 합니다. 새 런타임은 리플렉션 또는 다른 동적 .NET 런타임 기능을 사용하여 테스트 실행을 조정하지 않습니다.
런타임 투명도: 테스트 런타임은 테스트 프레임워크 코드를 방해하지 않고,
AppDomain
또는AssemblyLoadContext
같은 격리된 컨텍스트를 만들지 않으며, 리플렉션 또는 사용자 지정 어셈블리 확인자를 사용하지 않습니다.확장컴파일 시간 등록: 테스트 프레임워크 및 in/out-of-process 확장과 같은 확장은 컴파일 시간 동안 등록되어 결정성을 보장하고 불일치를 쉽게 검색할 수 있습니다.
제로 종속성: 플랫폼의 핵심은 지원되는 런타임 이외의 종속성이 없는 단일 .NET 어셈블리인
Microsoft.Testing.Platform.dll
.호스트 가능: 테스트 런타임은 모든 .NET 애플리케이션에서 호스트할 수 있습니다. 콘솔 애플리케이션은 일반적으로 테스트를 실행하는 데 사용되지만 모든 유형의 .NET 애플리케이션에서 테스트 애플리케이션을 만들 수 있습니다. 이렇게 하면 제한 사항이 있을 수 있는 디바이스 또는 브라우저와 같은 특수 컨텍스트 내에서 테스트를 실행할 수 있습니다.
모든 .NET 폼 팩터 지원: 네이티브 AOT를 포함하여 현재 및 미래의 .NET 폼 팩터를 지원합니다.
성능: 기본이 아닌 코드로 런타임이 부풀어 오르지 않도록 기능과 확장 지점 간의 적절한 균형을 찾습니다. 새 테스트 플랫폼은 테스트 실행을 수행하는 방법에 대한 구현 세부 정보를 제공하는 대신 테스트 실행을 "오케스트레이션"하도록 설계되었습니다.
충분히 확장 가능한: 새 플랫폼은 런타임 실행의 최대 사용자 지정을 허용하도록 확장성 지점을 기반으로 합니다. 이를 통해 테스트 프로세스 호스트를 구성하고, 테스트 프로세스를 관찰하고, 테스트 호스트 프로세스 내에서 테스트 프레임워크의 정보를 사용할 수 있습니다.
단일 모듈 배포: 호스트 기능 기능을 사용하면 단일 모듈 배포 모델을 사용할 수 있으며, 단일 컴파일 결과를 사용하여 다른 실행 가능한 모듈을 제공할 필요 없이 Out-of-process 및 in-process의 모든 확장성 지점을 지원할 수 있습니다.
지원되는 테스트 프레임워크
- MSTest. MSTest에서
Microsoft.Testing.Platform
지원은 MSTest runner통해 수행됩니다. - NUnit. NUnit에서
Microsoft.Testing.Platform
지원은 NUnit runner통해 수행됩니다. - xUnit.net: xUnit.net
Microsoft.Testing.Platform
지원은 xUnit.net 실행기통해 수행됩니다. - TUnit: 완전히
Microsoft.Testing.Platform
위에 생성됩니다. 자세한 내용은 TUnit 설명서참조하세요.
테스트 실행 및 디버그
Microsoft.Testing.Platform
테스트 프로젝트는 직접 실행(또는 디버그)할 수 있는 실행 파일로 빌드됩니다. 콘솔 또는 명령을 실행하는 추가 테스트는 없습니다. 대부분의 실행 파일에 일반적인 오류가 있는 경우 앱은 0이 아닌 종료 코드로 종료됩니다. 알려진 종료 코드에 대한 자세한 내용은 microsoft.Testing.Platform 종료 코드 참조하세요.
팁
명령줄 옵션을 사용하여 특정 --ignore-exit-code
무시할 수 있습니다.
TestingPlatformCommandLineArguments
MSBuild 속성을 사용하여 프로젝트 파일의 특정 테스트 프로젝트에 적용되는 명령줄 옵션을 설정할 수도 있습니다. 한 가지 일반적인 사용 사례는 모든 테스트가 무시된 테스트 프로젝트에 대한 것이며, 일반적으로 종료 코드 8(테스트 세션이 0개 테스트를 실행)으로 종료됩니다. 이 시나리오에서는 프로젝트 파일의 PropertyGroup
아래에 다음을 추가할 수 있습니다.
<TestingPlatformCommandLineArguments>$(TestingPlatformCommandLineArguments) --ignore-exit-code 8</TestingPlatformCommandLineArguments>
중요하다
기본적으로 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
옵션을 사용합니다.
@
응답 파일의 이름을 지정합니다. 응답 파일 이름은 @ 문자와 응답 파일 이름 사이에 공백이 없는 @ 문자 바로 뒤에 와야 합니다.
응답 파일의 옵션은 명령줄의 해당 위치에 있는 것처럼 해석됩니다. 응답 파일의 각 인수는 동일한 줄에서 시작하고 끝나야 합니다. 백슬래시 문자()를 사용하여 선을 연결할 수 없습니다. 응답 파일을 사용하면 터미널 제한을 초과할 수 있는 매우 긴 명령에 도움이 됩니다. 응답 파일을 인라인 명령줄 인수와 결합할 수 있습니다. 예를 들어:
./TestExecutable.exe @"filter.rsp" --timeout 10s
여기서 filter.rsp 다음 내용을 포함할 수 있습니다.
--filter "A very long filter"
또는 다음과 같이 단일 rsp 파일을 사용하여 시간 제한과 필터를 모두 지정할 수 있습니다.
./TestExecutable.exe @"arguments.rsp"
--filter "A very long filter" --timeout 10s
--config-file
testconfig.json 파일을 지정합니다.
--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
.--exit-on-process-exit
종속 프로세스가 종료되면 테스트 프로세스를 종료합니다. PID를 제공해야 합니다.
--help
명령을 사용하는 방법에 대한 설명을 출력합니다.
--ignore-exit-code
0이 아닌 일부 종료 코드를 무시하고 대신
0
반환할 수 있습니다. 자세한 내용은 특정 종료 코드 무시를 참조하세요.--info
다음과 같은 .NET 테스트 애플리케이션에 대한 고급 정보를 표시합니다.
- 플랫폼
- 환경입니다.
- 등록된 각 명령줄 공급자(예:
name
,version
,description
및options
). - 등록된 각 도구(예:
command
,name
,version
,description
) 및 모든 명령줄 공급자
이 기능은 동일한 명령줄 옵션을 등록하는 확장 또는 여러 버전의 확장(또는 플랫폼) 간에 사용 가능한 옵션의 변경 내용을 이해하는 데 사용됩니다.
--list-tests
사용 가능한 테스트를 나열합니다. 테스트는 실행되지 않습니다.
--maximum-failed-tests
도달하면 테스트 실행을 중지하는 최대 테스트 실패 수를 지정합니다. 이 스위치를 지원하려면 프레임워크 작성자가
IGracefulStopTestExecutionCapability
기능을 구현해야 합니다. 테스트 실패의 양에 도달할 때 종료 코드는 13입니다. 자세한 내용은 microsoft.Testing.Platform 종료 코드 참조하세요.메모
이 기능은 버전 1.5부터 Microsoft.Testing.Platform에서 사용할 수 있습니다.
--minimum-expected-tests
실행될 것으로 예상되는 최소 테스트 수를 지정합니다. 기본적으로 하나 이상의 테스트가 실행되어야 합니다.
--results-directory
테스트 결과를 배치할 디렉터리입니다. 지정된 디렉터리가 없으면 생성됩니다. 기본값은 테스트 애플리케이션을 포함하는 디렉터리에
TestResults
.--timeout
글로벌 테스트 실행 타임아웃입니다. 하나의 인수를
<value>[h|m|s]
형식의 문자열로 사용하며, 여기서<value>
은 부동 소수점 숫자입니다.
MSBuild 통합
Microsoft.Testing.Platform.MSBuild NuGet 패키지는 MSBuild와 Microsoft.Testing.Platform
다양한 통합을 제공합니다.
-
dotnet test
지원합니다. 자세한 내용은 dotnet 테스트를 사용하여 테스트를 참조하세요. -
ProjectCapability
및Visual Studio
테스트 탐색기에 필요한Visual Studio Code
에 대한 지원. - 진입점(
Main
메서드)의 자동 생성 - 구성 파일의 자동 생성
메모
이 통합은 전이적인 방식으로 작동하며(이 패키지를 참조하는 다른 프로젝트를 참조하는 프로젝트는 패키지를 참조하는 것처럼 동작) IsTestingPlatformApplication
MSBuild 속성을 통해 사용하지 않도록 설정할 수 있습니다.
참조
- Microsoft.Testing.Platform 및 VSTest 비교
- Microsoft.Testing.Platform 확장
- Microsoft.Testing.Platform 원격 분석
- Microsoft.Testing.Platform 종료 코드
.NET