mirror of https://github.com/docker/docs.git
97 lines
2.9 KiB
Markdown
97 lines
2.9 KiB
Markdown
---
|
||
title: Run your tests using Go test
|
||
linkTitle: Run your tests
|
||
weight: 30
|
||
keywords: build, go, golang, test
|
||
description: How to build and run your Go tests in a container
|
||
aliases:
|
||
- /get-started/golang/run-tests/
|
||
- /language/golang/run-tests/
|
||
- /guides/language/golang/run-tests/
|
||
---
|
||
|
||
## Prerequisites
|
||
|
||
Complete the [Build your Go image](build-images.md) section of this guide.
|
||
|
||
## Overview
|
||
|
||
Testing is an essential part of modern software development. Testing can mean a
|
||
lot of things to different development teams. There are unit tests, integration
|
||
tests and end-to-end testing. In this guide you take a look at running your unit
|
||
tests in Docker when building.
|
||
|
||
For this section, use the `docker-gs-ping` project that you cloned in [Build
|
||
your Go image](build-images.md).
|
||
|
||
## Run tests when building
|
||
|
||
To run your tests when building, you need to add a test stage to the
|
||
`Dockerfile.multistage`. The `Dockerfile.multistage` in the sample application's
|
||
repository already has the following content:
|
||
|
||
```dockerfile {hl_lines="15-17"}
|
||
# 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 the following command to build an image using the `run-test-stage` stage as the target and view the test results. Include `--progress plain` to view the build output, `--no-cache` to ensure the tests always run, and `--target run-test-stage` to target the test stage.
|
||
|
||
```console
|
||
$ docker build -f Dockerfile.multistage -t docker-gs-ping-test --progress plain --no-cache --target run-test-stage .
|
||
```
|
||
|
||
You should see output containing the following.
|
||
|
||
```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
|
||
```
|
||
|
||
## Next steps
|
||
|
||
In this section, you learned how to run tests when building your image. Next,
|
||
you’ll learn how to set up a CI/CD pipeline using GitHub Actions.
|