--- 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.