mirror of https://github.com/docker/docs.git
119 lines
4.1 KiB
Markdown
119 lines
4.1 KiB
Markdown
---
|
||
title: Run .NET tests in a container
|
||
linkTitle: Run your tests
|
||
weight: 30
|
||
keywords: .NET, test
|
||
description: Learn how to run your .NET tests in a container.
|
||
aliases:
|
||
- /language/dotnet/run-tests/
|
||
- /guides/language/dotnet/run-tests/
|
||
---
|
||
|
||
## Prerequisites
|
||
|
||
Complete all the previous sections of this guide, starting with [Containerize a .NET application](containerize.md).
|
||
|
||
## 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 developing and when building.
|
||
|
||
## Run tests when developing locally
|
||
|
||
The sample application already has an xUnit test inside the `tests` directory. When developing locally, you can use Compose to run your tests.
|
||
|
||
Run the following command in the `docker-dotnet-sample` directory to run the tests inside a container.
|
||
|
||
```console
|
||
$ docker compose run --build --rm server dotnet test /source/tests
|
||
```
|
||
|
||
You should see output that contains the following.
|
||
|
||
```console
|
||
Starting test execution, please wait...
|
||
A total of 1 test files matched the specified pattern.
|
||
|
||
Passed! - Failed: 0, Passed: 1, Skipped: 0, Total: 1, Duration: < 1 ms - /source/tests/bin/Debug/net8.0/tests.dll (net8.0)
|
||
```
|
||
|
||
To learn more about the command, see [docker compose run](/reference/cli/docker/compose/run/).
|
||
|
||
## Run tests when building
|
||
|
||
To run your tests when building, you need to update your Dockerfile. You can create a new test stage that runs the tests, or run the tests in the existing build stage. For this guide, update the Dockerfile to run the tests in the build stage.
|
||
|
||
The following is the updated Dockerfile.
|
||
|
||
```dockerfile {hl_lines="9"}
|
||
# syntax=docker/dockerfile:1
|
||
|
||
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS build
|
||
ARG TARGETARCH
|
||
COPY . /source
|
||
WORKDIR /source/src
|
||
RUN --mount=type=cache,id=nuget,target=/root/.nuget/packages \
|
||
dotnet publish -a ${TARGETARCH/amd64/x64} --use-current-runtime --self-contained false -o /app
|
||
RUN dotnet test /source/tests
|
||
|
||
FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS development
|
||
COPY . /source
|
||
WORKDIR /source/src
|
||
CMD dotnet run --no-launch-profile
|
||
|
||
FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine AS final
|
||
WORKDIR /app
|
||
COPY --from=build /app .
|
||
ARG UID=10001
|
||
RUN adduser \
|
||
--disabled-password \
|
||
--gecos "" \
|
||
--home "/nonexistent" \
|
||
--shell "/sbin/nologin" \
|
||
--no-create-home \
|
||
--uid "${UID}" \
|
||
appuser
|
||
USER appuser
|
||
ENTRYPOINT ["dotnet", "myWebApp.dll"]
|
||
```
|
||
|
||
Run the following command to build an image using the build 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 build` to target the build stage.
|
||
|
||
```console
|
||
$ docker build -t dotnet-docker-image-test --progress=plain --no-cache --target build .
|
||
```
|
||
|
||
You should see output containing the following.
|
||
|
||
```console
|
||
#11 [build 5/5] RUN dotnet test /source/tests
|
||
#11 1.564 Determining projects to restore...
|
||
#11 3.421 Restored /source/src/myWebApp.csproj (in 1.02 sec).
|
||
#11 19.42 Restored /source/tests/tests.csproj (in 17.05 sec).
|
||
#11 27.91 myWebApp -> /source/src/bin/Debug/net8.0/myWebApp.dll
|
||
#11 28.47 tests -> /source/tests/bin/Debug/net8.0/tests.dll
|
||
#11 28.49 Test run for /source/tests/bin/Debug/net8.0/tests.dll (.NETCoreApp,Version=v8.0)
|
||
#11 28.67 Microsoft (R) Test Execution Command Line Tool Version 17.3.3 (x64)
|
||
#11 28.67 Copyright (c) Microsoft Corporation. All rights reserved.
|
||
#11 28.68
|
||
#11 28.97 Starting test execution, please wait...
|
||
#11 29.03 A total of 1 test files matched the specified pattern.
|
||
#11 32.07
|
||
#11 32.08 Passed! - Failed: 0, Passed: 1, Skipped: 0, Total: 1, Duration: < 1 ms - /source/tests/bin/Debug/net8.0/tests.dll (net8.0)
|
||
#11 DONE 32.2s
|
||
```
|
||
|
||
## Summary
|
||
|
||
In this section, you learned how to run tests when developing locally using Compose and how to run tests when building your image.
|
||
|
||
Related information:
|
||
|
||
- [docker compose run](/reference/cli/docker/compose/run/)
|
||
|
||
## Next steps
|
||
|
||
Next, you’ll learn how to set up a CI/CD pipeline using GitHub Actions.
|