Docker教程 · 2024年11月11日

使用 Go test 运行测试

使用 Go test 运行测试

完成 本指南的

测试是现代软件开发的重要组成部分。测试对于不同的开发团队来说意味着很多事情。有单元测试、集成测试和端到端测试。在本指南中,您将了解构建时在 Docker 中运行单元测试。

对于本部分,请使用您在docker-gs-ping中克隆的项目 。

要在构建时运行测试,您需要将测试阶段添加到 Dockerfile.multistage.示例应用程序的存储库Dockerfile.multistage中已包含以下内容:


# syntax=docker/dockerfile:1  # Build the application from source FROM golang:1.19 AS build-stage  WORKDIR /app  COPY go.mod go.sum ./ RUN go mod download  COPY *.go ./  RUN CGO_ENABLED=0 GOOS=linux go build -o /docker-gs-ping  # Run the tests in the container FROM build-stage AS run-test-stage RUN go test -v ./...  # Deploy the application binary into a lean image FROM gcr.io/distroless/base-debian11 AS build-release-stage  WORKDIR /  COPY --from=build-stage /docker-gs-ping /docker-gs-ping  EXPOSE 8080  USER nonroot:nonroot  ENTRYPOINT ["/docker-gs-ping"]

run-test-stage执行以下命令,以stage为目标构建镜像并查看测试结果。包括--progress plain查看构建输出、--no-cache确保测试始终运行以及--target run-test-stage针对测试阶段。


$ docker build -f Dockerfile.multistage -t docker-gs-ping-test --progress plain --no-cache --target run-test-stage . 

您应该看到包含以下内容的输出。


#13 [run-test-stage 1/1] RUN go test -v ./... #13 4.915 === RUN TestIntMinBasic #13 4.915 --- PASS: TestIntMinBasic (0.00s) #13 4.915 === RUN TestIntMinTableDriven #13 4.915 === RUN TestIntMinTableDriven/0,1 #13 4.915 === RUN TestIntMinTableDriven/1,0 #13 4.915 === RUN TestIntMinTableDriven/2,-2 #13 4.915 === RUN TestIntMinTableDriven/0,-1 #13 4.915 === RUN TestIntMinTableDriven/-1,0 #13 4.915 --- PASS: TestIntMinTableDriven (0.00s) #13 4.915 --- PASS: TestIntMinTableDriven/0,1 (0.00s) #13 4.915 --- PASS: TestIntMinTableDriven/1,0 (0.00s) #13 4.915 --- PASS: TestIntMinTableDriven/2,-2 (0.00s) #13 4.915 --- PASS: TestIntMinTableDriven/0,-1 (0.00s) #13 4.915 --- PASS: TestIntMinTableDriven/-1,0 (0.00s) #13 4.915 PASS

要了解有关构建和运行测试的更多信息,请参阅 。

在本部分中,您学习了如何在构建映像时运行测试。接下来,您将学习如何使用 GitHub Actions 设置 CI/CD 管道。