MTP 테스트 프로젝트는 직접 실행(또는 디버그)할 수 있는 실행 파일로 빌드됩니다. 콘솔 또는 명령을 실행하는 추가 테스트는 없습니다. 대부분의 실행 파일에 일반적인 오류가 있는 경우 앱은 0이 아닌 종료 코드로 종료됩니다. 알려진 종료 코드에 대한 자세한 내용은 MTP 종료 코드를 참조하세요.
팁 (조언)
명령줄 옵션을 사용하여 특정 --ignore-exit-code 무시할 수 있습니다.
TestingPlatformCommandLineArguments MSBuild 속성을 사용하여 project 파일의 특정 테스트 project 적용되는 명령줄 옵션을 설정할 수도 있습니다. 한 가지 일반적인 사용 사례는 모든 테스트가 무시된 테스트 프로젝트에 대한 것이며, 일반적으로 종료 코드 8(테스트 세션이 0개 테스트를 실행)으로 종료됩니다. 이 시나리오에서는 project 파일의 PropertyGroup 아래에 다음을 추가할 수 있습니다.
<TestingPlatformCommandLineArguments>$(TestingPlatformCommandLineArguments) --ignore-exit-code 8</TestingPlatformCommandLineArguments>
dotnet publish 사용하여 테스트 project 게시하고 앱을 직접 실행하는 것도 테스트를 실행하는 또 다른 방법입니다. 예를 들어 ./Contoso.MyTests.exe실행합니다. 일부 시나리오에서는 dotnet build 사용하여 실행 파일을 생성하는 것도 가능하지만, 네이티브 AOT 같은 에지 사례를 고려할 수 있습니다.
dotnet run 사용
dotnet run 명령을 사용하여 테스트 project 빌드하고 실행할 수 있습니다. 이는 테스트를 실행하는 가장 쉬운 방법이지만, 때로는 가장 느립니다.
dotnet run 사용하면 필요할 때 테스트 project 다시 작성되므로 로컬에서 테스트를 편집하고 실행할 때 실용적입니다.
dotnet run는 현재 폴더에서 프로젝트를 자동으로 찾습니다.
dotnet run --project Contoso.MyTests
dotnet run대한 자세한 내용은 dotnet run참조하세요.
dotnet exec 사용
dotnet exec 또는 dotnet 명령은 이미 빌드된 테스트 project 실행하거나 실행하는 데 사용되며, 이는 애플리케이션을 직접 실행하는 대신 사용됩니다.
dotnet exec 빌드된 테스트 project dll에 대한 경로가 필요합니다.
dotnet exec Contoso.MyTests.dll
또는
dotnet Contoso.MyTests.dll
비고
테스트 project 실행 파일(*.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\net10.0\Contoso.MyTests.exe'
dotnet exec대한 자세한 내용은 dotnet exec참조하세요.
dotnet test 사용
.NET 10 SDK dotnet test 부터 전용 MTP 모드가 있습니다.
global.json를 통해 MTP를 선택하거나, .NET 11 Preview 6 이상에서는 DOTNET_TEST_RUNNER 환경 변수를 사용하세요. 전용 모드는 프로젝트, 솔루션, 빌드된 테스트 모듈 및 최신 SDK 버전의 추가 입력 형식을 지원합니다.
dotnet test --test-modules Contoso.MyTests.dll
VSTest 호환 모드에서의 실행기 선택 및 마이그레이션에 대해서는 dotnet test를 사용한 테스트를 참조하세요.
MTP 테스트는 Visual Studio 실행하고 디버그할 수 있으며 테스트 탐색기와 통합되며 시작 프로젝트로 직접 실행할 수도 있습니다.
Visual Studio 사용하여 앱 실행
MTP 테스트 프로젝트는 실행 파일로 빌드되며 직접 실행할 수 있습니다. 필터가 제공되지 않는 한 지정된 실행 파일의 모든 테스트를 실행합니다.
- 실행하려는 테스트 프로젝트를 솔루션 탐색기에서 찾아 마우스 오른쪽 버튼을 클릭하고 시작 프로젝트로 설정을 선택합니다.
-
디버그>디버깅 없이 시작을 선택하거나 Ctrl+F5를 사용하여 선택한 테스트 프로젝트를 실행합니다.
콘솔 창에 테스트 실행의 실행 및 요약이 표시됩니다.
Visual Studio 직접 앱 디버그
MTP 테스트 프로젝트를 직접 디버그할 수 있습니다. 필터가 제공되지 않는 한 지정된 실행 파일의 모든 테스트를 디버그하려면 다음을 수행합니다.
- 실행하려는 테스트 프로젝트를 솔루션 탐색기에서 찾아 마우스 오른쪽 버튼을 클릭하고 시작 프로젝트로 설정을 선택합니다.
- 디버그하려는 테스트에 중단점을 설정합니다.
- 선택한 테스트 project 디버그하려면 Debug> 시작 디버깅(또는 F5)으로 이동합니다.
중단점이 있는 테스트에 도달할 때까지 모든 테스트가 실행됩니다. 테스트를 단계별로 실행하여 디버그합니다. 디버깅이 완료되면 앱이 중지되지 않는 한 나머지 모든 테스트 실행을 다시 시작합니다.
테스트 탐색기 사용
테스트를 실행하려면 테스트 탐색기이동하여 실행할 테스트(또는 테스트)를 선택합니다.
을 오른쪽 클릭하고을 실행합니다. 마찬가지로 테스트를 디버그하려면 테스트 탐색기에서 테스트(또는 테스트들)를 선택하고 오른쪽 클릭하여 디버그를 선택하세요.
비고
project 빌드하지 않은 테스트의 자동 업데이트는 사용할 수 없습니다.
C# 확장은 C# Dev Kit 함께 Visual Studio 코드에서 테스트를 디버그/실행할 뿐만 아니라 Visual Studio Code의 테스트 탐색기와의 통합을 추가할 수 있습니다.
Visual Studio Code를 사용하여 앱 실행
MTP 테스트 프로젝트는 실행 파일로 빌드되며 직접 실행할 수 있습니다. 필터가 제공되지 않는 한 지정된 실행 파일의 모든 테스트를 실행합니다.
- 테스트를 실행하려는 테스트 파일로 이동합니다.
-
Ctrl+F5 사용하여 선택한 테스트 project 실행합니다. 프로젝트가 여러 개 있는 경우 팝업에서 실행할 프로젝트를 선택하라는 메시지가 표시됩니다.
콘솔 창에 테스트 실행의 실행 및 요약이 표시됩니다.
Visual Studio Code에서 직접 앱 디버그
MTP 테스트 프로젝트는 실행 파일로 빌드되며 직접 실행할 수 있습니다. 필터가 제공되지 않는 한 지정된 실행 파일의 모든 테스트를 실행합니다.
- 테스트를 실행하려는 테스트 파일로 이동합니다.
-
F5 사용하여 선택한 테스트 project 디버그합니다. 프로젝트가 여러 개 있는 경우 팝업에서 실행할 프로젝트를 선택하라는 메시지가 표시됩니다.
팁 (조언)
solution explorer 실행하거나 해당 시작 구성을 만드는 등 C# DevKit을 사용하여 dotnet project 실행하는 다른 여러 가지 방법이 있습니다.
Visual Studio Code 설명서에는 지정됩니다.
project 실행되면 테스트 실행의 실행 및 요약과 함께 출력 탭이 나타납니다.
테스트 탐색기 사용
테스트를 실행하려면 테스트 탐색기이동하여 실행할 테스트(또는 테스트)를 선택합니다.
을 오른쪽 클릭하고을 실행합니다. 마찬가지로 테스트를 디버그하려면 테스트 탐색기에서 테스트(또는 테스트들)를 선택하고 오른쪽 클릭하여 디버그를 선택하세요.
비고
project 빌드하지 않은 테스트의 자동 업데이트는 사용할 수 없습니다.
여러 테스트 프로젝트를 병렬로 실행하려면 모든 테스트 실행 파일에 대한 파이프라인 단계를 추가하는 대신 솔루션에 대해 dotnet test를 한 번 호출합니다. 솔루션에 MTP 테스트 프로젝트를 추가하는 경우 파이프라인 변경 없이 동일한 명령으로 해당 프로젝트를 포함할 수 있습니다.
Azure Pipelines에서 솔루션 실행
.NET 10 SDK 이상 및 MTP 1.7 이상을 사용합니다. 솔루션의 모든 테스트 프로젝트는 MTP를 지원해야 하며, VSTest 전용 테스트 프로젝트는 이 모드에서 지원되지 않습니다. 이전 SDK 버전의 경우 VSTest 모드로 MTP 프로젝트 실행을 참조하세요.
리포지토리 루트에서 다음 콘텐츠가 포함된 global.json 파일을 만듭니다. 파일이 이미 있는 경우 test 섹션을 추가하고 해당 SDK 설정이 .NET 10 이상을 선택하는지 확인해야 합니다.
{
"test": {
"runner": "Microsoft.Testing.Platform"
}
}
TRX 보고서의 경우 각 테스트 프로젝트는 Microsoft.Testing.Extensions.TrxReport를 직접 또는 테스트 SDK 구성 또는 이를 포함하는 프로필을 통해 참조해야 합니다. 자세한 내용은 Visual Studio 테스트 보고서(TRX)를 참조하세요.
리포지토리에 다음 azure-pipelines.yml 파일을 추가하세요. 이 예제에서는 Contoso.sln와 global.json가 리포지토리 루트에 있다고 가정합니다.
Contoso.sln를 솔루션의 리포지토리 상대 경로로 대체합니다.
trigger:
- main
pool:
vmImage: ubuntu-latest
steps:
- task: UseDotNet@2
displayName: Install .NET SDK
inputs:
packageType: sdk
version: 10.0.x
- task: DotNetCoreCLI@2
displayName: Run solution tests
inputs:
command: test
projects: Contoso.sln
arguments: --configuration Release --max-parallel-test-modules 4
workingDirectory: $(Build.SourcesDirectory)
publishTestResults: true
DotNetCoreCLI@2 작업은 솔루션에 대해 dotnet test 한 번 호출합니다. 이 명령은 종속성을 복원하고, 솔루션을 빌드하고, 해당 솔루션의 MTP 테스트 모듈을 병렬로 실행합니다. 기본적으로 dotnet test는 한 번에 최대 Environment.ProcessorCount개의 모듈을 실행합니다. 이 예제에서는 --max-parallel-test-modules 4를 사용하여 동시성을 4개 모듈로 제한합니다. 에이전트의 CPU, 메모리 및 기타 리소스와 일치하도록 제한을 조정합니다.
중요합니다
**/*.csproj 솔루션 파일을 선택합니다. projects와 같은 프로젝트 파일 패턴은 선택하지 마세요. 태스크는 일치하는 각 파일에 대해 하나씩 개별적으로 dotnet test를 호출합니다. 단일 솔루션 호출을 사용하면 dotnet test가 해당 테스트 프로젝트 전반에서 병렬 실행을 조정할 수 있습니다.
모듈 수준 병렬 처리는 모듈 내에서 테스트의 병렬 실행과는 별개입니다. 어셈블리 내에서 병렬 테스트를 구성하려면 테스트 프레임워크의 설정을 사용하세요. MSTest의 경우 ParallelizeAttribute를 참조하세요.
publishTestResults: true를 사용하면 테스트가 실패하더라도 태스크가 및 --report-trx를 추가하고 보고서를 파이프라인 실행의 --results-directory 탭에 게시합니다. 0이 아닌 dotnet test 종료 코드도 작업 및 파이프라인을 실패하게 합니다.
비고
DotNetCoreCLI@2에서 MTP를 지원하려면 작업 버전 2.263.0 이상이 필요합니다. 태스크와 .NET SDK가 모두 MTP를 선택하도록 작업의 작업 디렉터리에 global.json를 보관합니다.
스크립트를 사용하여 솔루션을 실행
MTP가 지원되지 않는 작업 버전 또는 CLI 명령을 직접 제어하려면 스크립트를 사용하고 별도의 단계에서 TRX 보고서를 게시하세요. 동일한 .NET SDK global.json및 TRX 확장 요구 사항이 적용됩니다.
trigger:
- main
pool:
vmImage: ubuntu-latest
steps:
- task: UseDotNet@2
displayName: Install .NET SDK
inputs:
packageType: sdk
version: 10.0.x
- task: CmdLine@2
displayName: Run solution tests
inputs:
script: >-
dotnet test --solution Contoso.sln
--configuration Release
--max-parallel-test-modules 4
--results-directory "$(Agent.TempDirectory)"
--report-trx
workingDirectory: $(Build.SourcesDirectory)
- task: PublishTestResults@2
displayName: Publish test results
condition: succeededOrFailed()
inputs:
testResultsFormat: VSTest
testResultsFiles: '**/*.trx'
searchFolder: $(Agent.TempDirectory)
failTaskOnFailedTests: true
failTaskOnMissingResultsFile: true
succeededOrFailed() 조건은 테스트 실행 성공 또는 실패 후 결과를 게시합니다. 스크립트의 0이 아닌 종료 코드는 여전히 파이프라인을 실패하게 합니다. 모듈 간 보고서 덮어쓰기를 방지하려면 모든 모듈에 동일한 TRX 파일 이름을 할당하지 마세요. 명명 및 격리 옵션은 보고서 파일 이름을 참조하세요.
단일 테스트 실행 파일을 실행
단일 테스트 프로젝트의 경우 실행 파일을 직접 호출하기 전에 프로젝트를 빌드하거나 게시합니다.
- task: CmdLine@2
displayName: "Run Contoso.MyTests"
inputs:
script: '.\Contoso.MyTests\bin\Debug\net10.0\Contoso.MyTests.exe'