Как запустить модульные тесты.NET в Docker-контейнере
У меня есть приложение.NET Core, содержащее модульные тесты MSTest. Какой будет команда для выполнения всех тестов с использованием этого Dockerfile?
FROM microsoft/dotnet:1.1-runtime
ARG source
COPY . .
ENTRYPOINT ["dotnet", "test", "Unittests.csproj"]
Структура папок:
/Dockerfile
/Unittests.csproj
/tests/*.cs
2 ответа
Используйте базовый образ с установленным.NET Core SDK. Например:
microsoft/dotnet
microsoft/dotnet:1.1.2-sdk
Затем запустите dotnet test
консольная команда. Вот почему образ на основе SDK требуется - вы не можете запустить dotnet test
в образе на основе времени выполнения без SDK. Вот полностью работоспособный Dockerfile
пример:
FROM microsoft/dotnet
WORKDIR /app
COPY . .
RUN dotnet restore
# run tests on docker build
RUN dotnet test
# run tests on docker run
ENTRYPOINT ["dotnet", "test"]
RUN
Команды выполняются в процессе сборки образа докера.
ENTRYPOINT
Команда выполняется при запуске док-контейнера.
Для тех, кто также борется с этим вопросом, но
dotnet restore
занимает очень много времени, я создал Dockerfile ниже, который решил эту проблему для меня:
FROM mcr.microsoft.com/dotnet/sdk:5.0
WORKDIR /App
# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY ./test ./
RUN dotnet publish -c Release -o out
# run tests on docker run
ENTRYPOINT ["dotnet", "test"]
Примечание: я не включал
RUN dotnet test
в моем Dockerfile, так как это остановит сборку, если тесты не пройдут, и это не подходит для моего сценария
У меня также был файл .dockerignore со следующим содержимым:
bin/
obj/
Для справки, это была моя структура папок:
/bin/
/obj/
/test/*.cs
/.dockerignore
/Dockerfile
/testing.csproj