다음을 통해 공유


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 런타임 기능을 사용하여 테스트 실행을 조정하지 않습니다.

  • 런타임 투명도: 테스트 런타임은 테스트 프레임워크 코드를 방해하지 않으며, 리플렉션 또는 AppDomain사용자 지정 어셈블리 확인자를 사용하지 않는 것과 같은 AssemblyLoadContext 격리된 컨텍스트를 만들지 않습니다.

  • 확장의 컴파일 시간 등록: 테스트 프레임워크 및 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.Platformvstest.console.exedotnet 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, descriptionoptions).
    • 등록된 각 도구(예: 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 통합

NuGet 패키지 Microsoft.Testing.Platform.MSBuildMicrosoft.Testing.Platform에 대해 MSBuild와 다양한 통합을 제공합니다.

  • dotnet test를 지원합니다. 자세한 내용은 dotnet 테스트 통합을 참조하세요.
  • ProjectCapabilityVisual Studio 테스트 탐색기에 필요한 Visual Studio Code를 지원합니다.
  • 진입점 자동 생성(Main 메서드).
  • 구성 파일 자동 생성.

참고 항목

이 통합은 전이적 방식(이 패키지를 참조하는 다른 프로젝트를 참조하는 프로젝트는 패키지를 참조하는 것처럼 동작)으로 작동하며 IsTestingPlatformApplication MSBuild 속성을 통해 사용하지 않도록 설정할 수 있습니다.

참고 항목