⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Exécuter des tests .NET dans un conteneur

Prérequis

Terminez toutes les sections précédentes de ce guide, en commençant par Conteneuriser une application .NET.

Aperçu

Le test est une partie essentielle du développement logiciel moderne. Le test peut signifier beaucoup de choses pour différentes équipes de développement. Il y a les tests unitaires, les tests d'intégration et les tests de bout en bout. Dans ce guide, vous découvrirez comment exécuter vos tests unitaires dans Docker lors du développement et de la construction.

Exécuter des tests lors du développement local

L'application exemple a déjà un test xUnit dans le répertoire tests. Lors du développement local, vous pouvez utiliser Compose pour exécuter vos tests.

Exécutez la commande suivante dans le répertoire docker-dotnet-sample pour exécuter les tests à l'intérieur d'un conteneur.

$ docker compose run --build --rm server dotnet test /source/tests

Vous devriez voir une sortie contenant ce qui suit.

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)

Pour en savoir plus sur la commande, consultez docker compose run.

Exécuter des tests lors de la construction

Pour exécuter vos tests lors de la construction, vous devez mettre à jour votre Dockerfile. Vous pouvez créer une nouvelle étape de test qui exécute les tests, ou exécuter les tests dans l'étape de construction existante. Pour ce guide, mettez à jour le Dockerfile pour exécuter les tests dans l'étape de construction.

Voici le Dockerfile mis à jour.

# 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"]

Exécutez la commande suivante pour construire une image en utilisant l'étape de construction comme cible et voir les résultats des tests. Incluez --progress=plain pour voir la sortie de la construction, --no-cache pour vous assurer que les tests s'exécutent toujours, et --target build pour cibler l'étape de construction.

$ docker build -t dotnet-docker-image-test --progress=plain --no-cache --target build .

Vous devriez voir une sortie contenant ce qui suit.

#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

Résumé

Dans cette section, vous avez appris à exécuter des tests lors du développement local en utilisant Compose et comment exécuter des tests lors de la construction de votre image.

Informations connexes :

Prochaines étapes

Ensuite, vous apprendrez à configurer un pipeline CI/CD en utilisant GitHub Actions.