使用 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

後續步驟

在本節中,您學習了如何在建構映像檔時執行測試。 接下來,您將學習如何使用 GitHub Actions 設定 CI/CD 流程。