# Ejecuta tus pruebas usando Go test


## Requisitos previos

Completa la sección [Construye tu imagen de Go](/guides/golang/run-tests/build-images/) 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](/guides/golang/run-tests/build-images/).

## 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:

```dockerfile {hl_lines="15-17"}
# 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.

```console
$ 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.

```text
#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.

