当前位置:Java -> 在 GitHub Actions 中运行单元测试
使用单元测试验证代码更改是典型开发工作流程中的关键环节。GitHub Actions提供了许多自定义操作来收集和处理测试结果,使开发人员可以浏览结果、调试失败的测试并生成报告。
在本文中,我将向您展示如何将单元测试添加到GitHub Actions工作流程,并配置自定义操作来处理结果。
GitHub Actions是托管服务,因此您所需要做的就是拥有一个GitHub帐户。GitHub Actions工作流程的执行期间会安装所有其他依赖项,如软件开发工具包(SDK)。
GitHub Actions在很大程度上依赖社区贡献的第三方操作。通过快速搜索,至少能找到半打用于处理单元测试结果的操作,包括:
为了缩小选择范围,您需要考虑以下功能:
test-reporter操作,在本文中进行了演示。
下面显示的工作流程文件使用Maven运行测试,并使用test-reporter操作处理测试结果:
name: Java
on:
push:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Set up JDK 1.11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Build
run: mvn --batch-mode -DskipTests package
- name: Test
run: mvn --batch-mode -Dmaven.test.failure.ignore=true test
- name: Report
uses: dorny/test-reporter@v1
if: always()
with:
name: Maven Tests
path: target/surefire-reports/*.xml
reporter: java-junit
fail-on-error: true
Build
,Test
和Report
步骤对测试过程很重要。
首先,您构建应用程序,但跳过测试:
- name: Build
run: mvn --batch-mode -DskipTests package
接下来,您运行测试,即使有失败的测试,也允许命令通过。这使您可以将失败的测试的响应推迟到测试处理操作:
- name: Test
run: mvn --batch-mode -Dmaven.test.failure.ignore=true test
if属性设置为始终运行此步骤,这允许您即使在上面的Test
步骤中设置为在有失败测试的情况下使流程失败时,也可以生成报告。
fail-on-error属性设置为true
,如果有失败的测试,则使此工作流失败。这是将失败测试的响应推迟到测试处理操作的示例:
- name: Report
uses: dorny/test-reporter@v1
if: always()
with:
name: Maven Tests
path: target/surefire-reports/*.xml
reporter: java-junit
fail-on-error: true
下面显示的工作流程文件使用DotNET Core CLI运行测试,并使用test-reporter操作处理结果:
name: .NET Core
on:
push:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: 3.1.402
- name: Build
run: dotnet build --configuration Release
- name: Test
run: dotnet test --logger "trx;LogFileName=test-results.trx" || true
- name: Test Report
uses: dorny/test-reporter@v1
if: always()
with:
name: DotNET Tests
path: "**/test-results.trx"
reporter: dotnet-trx
fail-on-error: true
test命令如果有任何测试失败,将返回一个非零的退出代码,但您可以将对失败测试的响应推迟到测试处理器。通过链接|| true
到命令,您确保步骤总是通过:
- name: Test
run: dotnet test --logger "trx;LogFileName=test-results.trx" || true
然后,测试报告动作会处理报告文件,并将fail-on-error
设置为true
,以便在有任何失败的测试时使构建失败:
- name: Test Report
uses: dorny/test-reporter@v1
if: always()
with:
name: DotNET Tests
path: "**/test-results.trx"
reporter: dotnet-trx
fail-on-error: true
GitHub Actions 主要是一个任务执行环境,旨在验证和构建代码,并发布生成的工件。有许多第三方动作可让您生成测试报告并响应失败的测试,但 GitHub Actions 在跟踪测试结果方面存在一些缺陷。尽管如此,目前可用的报告功能仍然很有用,并且将会不断改进。
在本文中,你学到了:
部署愉快!
推荐阅读: 9.comparable 和 comparator的区别?
本文链接: 在 GitHub Actions 中运行单元测试