Compartir comentarios
Las respuestas se generan en base a la documentación.

Ejecuta tus pruebas usando Go test

Requisitos previos

Completa la sección Construye tu imagen de Go de esta guía.

Resumen

Las pruebas son una parte esencial del desarrollo de software moderno. Probar puede significar muchas cosas para los diferentes equipos de desarrollo. Existen pruebas unitarias, pruebas de integración y pruebas de extremo a extremo (end-to-end). En esta guía echarás un vistazo a cómo ejecutar tus pruebas unitarias en Docker durante la construcción.

Para esta sección, utiliza el proyecto docker-gs-ping que clonaste en Construye tu imagen de Go.

Ejecuta pruebas durante la construcción

Para ejecutar tus pruebas durante la construcción, debes agregar una etapa de prueba (test stage) al archivo Dockerfile.multistage. El Dockerfile.multistage en el repositorio de la aplicación de ejemplo ya contiene el siguiente contenido:

# syntax=docker/dockerfile:1

# Construye la aplicación a partir del código fuente
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

# Ejecuta las pruebas en el contenedor
FROM build-stage AS run-test-stage
RUN go test -v ./...

# Despliega el binario de la aplicación en una imagen ligera
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"]

Ejecuta el siguiente comando para construir una imagen utilizando la etapa run-test-stage como objetivo (target) y ver los resultados de la prueba. Incluye --progress plain para ver la salida de la construcción, --no-cache para garantizar que las pruebas siempre se ejecuten, y --target run-test-stage para apuntar a la etapa de prueba.

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

Deberías ver una salida que contenga lo siguiente.

#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

Siguientes pasos

En esta sección, aprendiste a ejecutar pruebas al construir tu imagen. A continuación, aprenderás a configurar una canalización de CI/CD (CI/CD pipeline) utilizando GitHub Actions.