我想在docker容器中运行dotnet test
命令,但我无法弄清楚命令的放置位置。该项目是.NET Core 2.1测试项目。原因是我想运行端到端集成测试,这需要我的所有容器都在运行。
DockerFile:
FROM microsoft/dotnet:2.1-runtime AS base
WORKDIR /app
FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY *.sln ./
COPY Sombra.IntegrationTests/Sombra.IntegrationTests.csproj Sombra.IntegrationTests/
COPY . .
WORKDIR /src/Sombra.IntegrationTests
RUN dotnet build -c Release -o /app
FROM build AS publish
RUN dotnet publish -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "test", "Sombra.IntegrationTests.csproj"]
搬运工-compose.yml
version: '3'
services:
sombra.integrationtests:
image: sombra.integrationtests
build:
context: .
dockerfile: Sombra.IntegrationTests/Dockerfile
depends_on:
- rabbitmq
答案 0 :(得分:3)
您正在使用运行时图像来调用 sdk 命令测试。您的最终来自 base , base 来自运行时。
我在构建容器时成功使用单元测试作为中间步骤,但从未使用docker-compose进行集成测试。关键的区别是我使用RUN
命令而不是entrypoint/cmd
,因此在构建容器时测试已经在执行。主要优点是测试失败时没有 final 图像。但话说回来,这是纯粹的单元测试,没有集成测试。虽然我可以想象这也会奏效。
以下是我的完整示例:
FROM microsoft/dotnet:2.0-sdk AS build-env
WORKDIR /app
# copy csproj and restore as distinct layers
COPY test.sln ./test.sln
COPY program/program.csproj ./program/program.csproj
COPY program.tests/program.tests.csproj ./program.tests/program.tests.csproj
RUN dotnet restore
# copy everything else and build
COPY . ./
RUN dotnet test program.tests -c Release
RUN dotnet publish program -c Release -o /app/out
# build runtime image
FROM microsoft/dotnet:2.0-runtime
WORKDIR /app
COPY --from=build-env /app/out ./
ENTRYPOINT ["dotnet", "program.dll"]
答案 1 :(得分:0)
您没有向我们提供错误日志或其他内容,但我的猜测是您尝试在未安装dotnet test Sombra.IntegrationTests.csproj
的映像上运行dotnet sdk
(仅限于dotnet runtime
)。
dotnet runtime
是dotnet核心版本,无法执行命令(如test
和build
)。它只能执行dll(因此名称为“runtime”)。