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.