使用 Go test 运行您的测试
目录
先决条件
完成本指南中的 构建您的 Go 镜像 部分。
概述
测试是现代软件开发中必不可少的一部分。测试对不同的开发团队来说可能意味着很多事情。有单元测试、集成测试和端到端测试。在本指南中,您将了解在构建时在 Docker 中运行您的单元测试。
在本节中,将使用您在 构建您的 Go 镜像 中克隆的 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
阶段作为目标构建镜像并查看测试结果。包括 --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
要详细了解构建和运行测试,请参阅 使用 Docker 构建指南。
下一步
在本节中,您了解了如何在构建镜像时运行测试。接下来,您将学习如何使用 GitHub Actions 设置 CI/CD 管道。