⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

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.