如何在GitHub Actions中依次运行两个.NET单元测试项目?
解决GitHub Actions中依次运行多个单元测试项目的问题
你可以通过两种方式修改工作流配置,实现两个测试项目的依次执行:
方法一:拆分独立测试步骤(简单直接)
直接添加两个独立的测试步骤,分别指定每个测试项目的路径,这样第一个项目测试完成且成功后,才会执行第二个项目的测试:
name: Build and Test on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: [windows-latest] env: Solution_Name: "Skeleton.sln" Test_Project_1: Tests\Test.csproj Test_Project_2: UnitTest/UnitTest.csproj steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Install .NET Core uses: actions/setup-dotnet@v3 with: dotnet-version: 6.0.x - name: Setup MSBuild uses: microsoft/setup-msbuild@v1.0.2 - name: Restore dependencies run: nuget restore "Skeleton.sln" - name: Build Solution run: msbuild "Skeleton.sln" - name: Execute first unit test project run: dotnet test ${{ env.Test_Project_1 }} - name: Execute second unit test project run: dotnet test ${{ env.Test_Project_2 }}
方法二:用循环批量执行(扩展性强)
如果以后可能添加更多测试项目,可以将所有测试项目路径存入环境变量,通过PowerShell循环依次执行:
name: Build and Test on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: [windows-latest] env: Solution_Name: "Skeleton.sln" # 用空格分隔多个测试项目路径,Windows下支持\或/作为路径分隔符 Test_Projects: "Tests\\Test.csproj UnitTest/UnitTest.csproj" steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Install .NET Core uses: actions/setup-dotnet@v3 with: dotnet-version: 6.0.x - name: Setup MSBuild uses: microsoft/setup-msbuild@v1.0.2 - name: Restore dependencies run: nuget restore "Skeleton.sln" - name: Build Solution run: msbuild "Skeleton.sln" - name: Execute all unit test projects in order run: | foreach ($testProject in $env:Test_Projects -split ' ') { dotnet test $testProject } shell: pwsh
说明
- 两种方法都会严格按照顺序执行测试项目,前一个项目测试失败的话,后续步骤会终止(符合GitHub Actions默认的失败终止逻辑)。
- 你原来的
dotnet test未执行两个项目,大概率是因为自动识别测试项目时出现了路径或项目类型的问题,指定具体项目路径可以避免这个问题。
内容的提问来源于stack exchange,提问作者user19540656
相关产品推荐
相关产品推荐

