다음을 통해 공유


'dotnet test'를 사용하여 테스트

이 문서에서는 CLI 명령어에 대한 인사이트를 제공하며, VSTest 및 Microsoft.Testing.Platform (MTP)과의 히스토리 호환성을 포함합니다.

dotnet test 명령은 두 가지 기본 모드에서 작동합니다.

  • VSTest 모드: 기본 모드 dotnet test 이며 .NET 10 SDK 이전에 사용할 수 있는 유일한 모드입니다. 주로 VSTest용으로 설계되었지만 Microsoft.Testing.Platform.MSBuild NuGet 패키지를 통해 Microsoft.Testing.Platform 테스트를 실행할 수도 있습니다.
  • Microsoft.Testing.Platform 모드: .NET 10 SDK에서 도입된 이 모드는 Microsoft.Testing.Platform으로 빌드된 테스트 애플리케이션만 지원합니다.

팁 (조언)

CLI 참조는 dotnet 테스트를 참조하세요.

dotnet test의 VSTest 모드

오랜 시간 동안 VSTest는 .NET에서 유일한 테스트 플랫폼이었습니다. 따라서 dotnet test VSTest에 맞게 조정된 모든 명령줄 옵션을 사용하여 VSTest 전용으로 설계되었습니다.

이 프로세스에는 MSBuild 대상을 호출하는 작업이 VSTest 포함되며, 이 대상은 다른 내부 대상을 실행하도록 트리거하고 궁극적으로 vstest.console을 실행합니다. 모든 dotnet test 명령줄 옵션은 vstest.console에서 해당 옵션으로 변환됩니다.

VSTest 모드로 MTP 프로젝트 실행

dotnet test 는 VSTest 모드에서 VSTest 프로젝트를 실행하도록 설계되었습니다. 그러나 dotnet test 패키지를 사용하여 VSTest 모드에서 MTP 프로젝트를 실행할 수 있습니다. 사용자의 관점에서 이 지원은 MSBuild 속성을 TestingPlatformDotnetTestSupport로 설정하여 사용할 수 있도록 합니다 (true가 기본값으로 이전 버전과 호환되기 때문입니다). 이 속성을 true로 설정하면 Microsoft.Testing.Platform.MSBuild가 VSTest의 대상 동작을 변경하여 InvokeTestingPlatform 호출로 리디렉션합니다. InvokeTestingPlatform 는 MTP 테스트 애플리케이션을 실행 파일로 올바르게 실행하는 Microsoft.Testing.Platform.MSBuild에 포함된 MSBuild 대상입니다. VSTest 관련 명령줄 옵션(예: --logger)은 이 모드에서 자동으로 무시됩니다. MTP 관련 인수(--report-trx 등)을 포함하려면 추가 -- 뒤에 덧붙여야 합니다. 예: dotnet test -- --report-trx.

비고

MSTest 및 NUnit은 Microsoft.Testing.Extensions.VSTestBridge 패키지를 사용합니다. EnableMSTestRunner 또는 EnableNUnitRunner를 설정하면 (이는 Microsoft.Testing.Platform을 사용하도록 설정함), 테스트 프로젝트가 VSTest와 Microsoft.Testing.Platform을 모두 지원하게 됩니다. 해당 시나리오에서 dotnet test의 VSTest 모드를 사용하고 TestingPlatformDotnetTestSupport를 true로 설정하지 않으면 기본적으로 EnableMSTestRunnerEnableNUnitRunner를 true로 설정하지 않은 것처럼 완전히 VSTest로 실행됩니다.

비고

TestingPlatformDotnetTestSupport에서 Directory.Build.props 속성을 설정하는 것이 좋습니다. 이렇게 하면 모든 테스트 프로젝트 파일에 개별적으로 추가할 필요가 없습니다. 또한 이 속성을 설정하지 않은 새 테스트 프로젝트를 도입할 위험이 없으므로 일부 프로젝트에서는 VSTest를 사용하고 다른 프로젝트는 Microsoft.Testing.Platform을 사용하는 솔루션이 될 수 있습니다. 이 혼합 구성이 제대로 작동하지 않을 수 있으며 지원되지 않는 시나리오입니다.

중요합니다

VSTest 모드에서 MTP 프로젝트를 실행하는 것은 .NET 10 SDK의 최신 환경을 위해 레거시로 간주됩니다. 이 모드에서 실행 지원은 Microsoft.Testing.Platform 버전 2에서 제거됩니다. 자세한 내용은 MTP 모드로 마이그레이션을 dotnet test참조하세요.

다음 목록에서는 Microsoft.Testing.Platform에서 지원하는 VSTest 모드 명령의 dotnet test 명령줄 옵션을 간략하게 설명합니다. 이러한 옵션은 빌드 프로세스와 관련이 있으며 VSTest에 전달되지 않으므로 MTP에서 작동합니다.

  • -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>

팁 (조언)

MSBuild 속성을 통해 TestingPlatformCommandLineArguments 테스트 애플리케이션의 명령줄 인수를 사용자 지정할 수 있습니다.

<PropertyGroup>
  ...
  <TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
</PropertyGroup>

VSTest 모드에서 dotnet testMTP 프로젝트를 실행하는 방법에 대한 자세한 내용은 VSTest dotnet test모드에서 Microsoft.Testing.Platform 사용을 참조하세요.

고급 기술 세부 정보

VSTest 모드에서는 dotnet test-- RunSettings 인수를 나타내는 데 사용됩니다. 원래는 dotnet test 이러한 인수를 MSBuild 속성으로 VSTestCLIRunSettings전달하도록 설계되었습니다. 따라서 VSTest 모드에서 MTP 테스트 애플리케이션을 실행할 때 "애플리케이션 인수"를 나타내는 값을 VSTestCLIRunSettings 다시 설정합니다.

VSTest 및 Microsoft.Testing.Platform(MTP) 혼합

VSTest 모드에서 실행하는 dotnet test 경우 동일한 솔루션에 VSTest와 Microsoft.Testing.Platform을 모두 포함하지 않는 것이 좋습니다.

이 시나리오는 공식적으로 지원되지 않으며 다음 사항에 유의해야 합니다.

  • VSTest 관련 명령줄 옵션은 MTP 테스트 애플리케이션이 아닌 VSTest 프로젝트에만 적용됩니다.
  • 이후에 -- 제공되는 MTP 관련 명령줄 옵션은 VSTest 프로젝트에 대한 RunSettings 인수로 처리됩니다.

주요 내용

  • VSTest 모드에서 dotnet test MTP 테스트 애플리케이션을 실행하려면, 먼저 MTP 관련 명령줄 옵션을 추가한 후 Microsoft.Testing.Platform.MSBuild에 전달해야 하며, --을(를) TestingPlatformDotnetTestSupport로 설정해야 합니다.
  • VSTest 지향 명령줄 옵션은 자동으로 무시됩니다.

이러한 문제로 인해 .NET은 MTP용으로 특별히 설계된 새 dotnet test 모드를 도입했습니다. MTP 사용자는 .NET 10 SDK를 사용하여 VSTest dotnet test 모드에서 새 모드로 전환하는 것이 좋습니다.

의 MTP(Microsoft.Testing.Platform) 모드 dotnet test

VSTest 모드에서 MTP로 실행할 dotnet test 때 발생하는 문제를 해결하기 위해 .NET은 MTP용으로 특별히 설계된 .NET 10 SDK에 새 모드를 도입했습니다.

이 모드를 dotnet.config 사용하도록 설정하려면 리포지토리 또는 솔루션의 루트에 파일을 추가합니다.

[dotnet.test.runner]
name = "Microsoft.Testing.Platform"

중요합니다

MTP 환경은 dotnet test 버전 1.7 이상에서 Microsoft.Testing.Platform 만 지원됩니다.

이 모드는 Microsoft.Testing.Platform TestingPlatformDotnetTestSupport 용으로 특별히 설계되었으므로 추가 -- 모드도 필요하지 않습니다.

중요합니다

이 모드는 Microsoft.Testing.Platform 버전 1.7.0 이상과만 호환됩니다.

중요합니다

테스트 프로젝트가 VSTest를 지원하지만 MTP를 지원하지 않는 경우 오류가 생성됩니다.

팁 (조언)

MSBuild 속성을 통해 TestingPlatformCommandLineArguments 테스트 애플리케이션의 명령줄 인수를 사용자 지정할 수 있습니다.

<PropertyGroup>
  ...
  <TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
</PropertyGroup>

dotnet test을(를) MTP 모드로 마이그레이션하기

VSTest 모드 dotnet test를 사용하는 MTP 사용자의 경우 최신 dotnet test 환경으로 마이그레이션하는 데 필요한 작업은 거의 없습니다.

  1. 위와 같이 리포지토리의 루트에 추가 dotnet.config 합니다.
  2. 더 이상 필요하지 않으므로 MSBuild 속성을 제거 TestingPlatformDotnetTestSupport 합니다.
  3. TestingPlatformCaptureOutputTestingPlatformShowTestsFailure MSBuild 속성을 제거하십시오. 이들은 더 이상 새 dotnet test에서 사용되지 않습니다.
  4. 추가된 --를 제거합니다. 예를 들어 dotnet test -- --report-trxdotnet test --report-trx로 변경되어야 합니다.
  5. 예를 들어 dotnet test MySolution.sln특정 솔루션을 전달하는 경우 이 값은 다음과 같습니다 dotnet test --solution MySolution.sln.
  6. 예를 들어 dotnet test MyProject.csproj특정 프로젝트를 전달하는 경우 이 작업은 다음과 같습니다 dotnet test --project MyProject.csproj.
  7. 예를 들어 dotnet test path/to/mydirectory 특정 디렉터리를 전달하는 경우, 이는 dotnet test --directory path/to/mydirectory로 변경되어야 합니다.
  8. 예를 들어 dotnet test path/to/UnitTests.dll특정 dll을 전달하는 경우 이 값이 됩니다 dotnet test --test-modules path/to/UnitTests.dll. --test-modules 또한 globbing도 지원합니다.