Exécutez vos tests avec Go test
Prérequis
Terminez la section Construire votre image Go de ce guide.
Aperçu
Les tests sont une partie essentielle du développement logiciel moderne. Les tests peuvent signifier beaucoup de choses pour différentes équipes de développement. Il y a les tests unitaires, les tests d'intégration et les tests de bout en bout. Dans ce guide, vous examinerez l'exécution de vos tests unitaires dans Docker lors de la construction.
Pour cette section, utilisez le projet docker-gs-ping
que vous avez cloné dans Construire
votre image Go.
Exécuter les tests lors de la construction
Pour exécuter vos tests lors de la construction, vous devez ajouter une étape de test au
Dockerfile.multistage
. Le Dockerfile.multistage
dans le dépôt de l'application d'exemple
a déjà le contenu suivant :
# syntax=docker/dockerfile:1
# Construire l'application à partir des sources
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
# Exécuter les tests dans le conteneur
FROM build-stage AS run-test-stage
RUN go test -v ./...
# Déployer le binaire de l'application dans une image légère
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"]
Exécutez la commande suivante pour construire une image en utilisant l'étape run-test-stage
comme cible et afficher les résultats des tests. Incluez --progress plain
pour afficher la sortie de la construction, --no-cache
pour vous assurer que les tests s'exécutent toujours, et --target run-test-stage
pour cibler l'étape de test.
$ docker build -f Dockerfile.multistage -t docker-gs-ping-test --progress plain --no-cache --target run-test-stage .
Vous devriez voir une sortie contenant ce qui suit.
#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
Prochaines étapes
Dans cette section, vous avez appris à exécuter des tests lors de la construction de votre image. Ensuite, vous apprendrez à mettre en place un pipeline CI/CD à l'aide de GitHub Actions.