Ejecutar pruebas de .NET en un contenedor
Requisitos previos
Completa todas las secciones anteriores de esta guía, comenzando con Containerizar una aplicación .NET.
Resumen
Las pruebas son una parte esencial del desarrollo de software moderno. Las pruebas pueden significar muchas cosas para diferentes equipos de desarrollo. Existen pruebas unitarias, de integración y de extremo a extremo (end-to-end). En esta guía, analizarás cómo ejecutar tus pruebas unitarias en Docker tanto durante el desarrollo como al compilar.
Ejecutar pruebas al desarrollar localmente
La aplicación de ejemplo ya tiene una prueba de xUnit dentro del directorio tests. Cuando desarrollas localmente, puedes usar Compose para ejecutar tus pruebas.
Ejecuta el siguiente comando en el directorio docker-dotnet-sample para ejecutar las pruebas dentro de un contenedor.
$ docker compose run --build --rm server dotnet test /source/tests
Deberías ver una salida que contenga lo siguiente.
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/net10.0/tests.dll (net10.0)
Para obtener más información sobre el comando, consulta docker compose run.
Ejecutar pruebas al compilar
Para ejecutar tus pruebas al compilar, debes actualizar tu Dockerfile. Puedes crear una nueva etapa (stage) de prueba que ejecute las pruebas, o ejecutarlas en la etapa de compilación existente. Para esta guía, actualiza el Dockerfile para ejecutar las pruebas en la etapa de compilación (build stage).
A continuación se muestra el Dockerfile actualizado.
# syntax=docker/dockerfile:1
FROM --platform=$BUILDPLATFORM dhi.io/dotnet:10-sdk 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 dhi.io/dotnet:10-sdk AS development
COPY . /source
WORKDIR /source/src
CMD dotnet run --no-launch-profile
FROM dhi.io/aspnetcore:10 AS final
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "myWebApp.dll"]# syntax=docker/dockerfile:1
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:10.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:10.0-alpine AS development
COPY . /source
WORKDIR /source/src
CMD dotnet run --no-launch-profile
FROM mcr.microsoft.com/dotnet/aspnet:10.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"]Ejecuta el siguiente comando para compilar una imagen utilizando la etapa build como objetivo (target) y ver los resultados de las pruebas. Incluye --progress=plain para ver el detalle de la compilación, --no-cache para garantizar que las pruebas siempre se ejecuten y --target build para apuntar a la etapa de compilación.
$ docker build -t dotnet-docker-image-test --progress=plain --no-cache --target build .
Deberías ver una salida que contenga lo siguiente.
#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/net10.0/myWebApp.dll
#11 28.47 tests -> /source/tests/bin/Debug/net10.0/tests.dll
#11 28.49 Test run for /source/tests/bin/Debug/net10.0/tests.dll (.NETCoreApp,Version=v10.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/net10.0/tests.dll (net10.0)
#11 DONE 32.2s
Resumen
En esta sección, aprendiste a ejecutar pruebas al desarrollar localmente usando Compose y cómo ejecutarlas al compilar tu imagen.
Información relacionada:
Próximos pasos
A continuación, aprenderás cómo configurar un pipeline de CI/CD usando GitHub Actions.