如何在 docker 容器中运行 C# 单元测试



i 在 docker 容器中运行单元测试时出现问题。 我正在使用自定义类方法的Nunit测试创建ApiTests项目。测试已成功运行。 然后创建使用 ApiTests 的 UnitApiTestsService 项目.dll例如:

var dockerEnvironment = Environment.GetEnvironmentVariable("DOCKER_UNIT_TEST_ENVIRONMENT")=="TRUE" ? true : false;
var info = new ProcessStartInfo
{
FileName = "dotnet",                       
Arguments = dockerEnvironment ? "vstest ApiTests.dll" : "vstest ../ApiTests/bin/Debug/netcoreapp2.2/ApiTests.dll",
UseShellExecute = false,
RedirectStandardOutput = true
};
_shedulerProcess = Process.Start(info);
var testResults = _shedulerProcess.StandardOutput.ReadToEnd();
_shedulerProcess.WaitForExit();

码头工人环境是真的

由来自 RabbitMQ 的消息运行的服务。 在本地(当我在 IDE 中运行项目时(都成功工作,但是当我将 UnitApiTestsService 放在 docker 映像中时,启动此映像后,我在线 Process.Start(info(;有了这个文字:

vstest.console process failed to connect to testhost process after 10000 seconds. This may occur due to machine slowness, please set environment variable VSTEST_CONNECTION_TIMEOUT to increase timeout. Test Run Aborted.

我的 Dockerfile:

#FROM microsoft/dotnet:2.2-sdk AS build-env
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-env
WORKDIR /app
COPY . .
RUN dotnet publish ./Operations/ApiTests -c Release -o publish
RUN dotnet publish ./Operations/UnitAPITestsService -c Release -o publish
WORKDIR /app/Operations/ApiTests/
RUN dotnet restore .; exit 0;
RUN dotnet build
# Build runtime image
#FROM microsoft/dotnet:2.2-sdk
FROM mcr.microsoft.com/dotnet/core/sdk:2.2
#FROM mcr.microsoft.com/dotnet/core/aspnet:2.2  
WORKDIR /app
COPY --from=build-env /app/Operations/UnitAPITestsService/publish .
ENTRYPOINT ["dotnet", "UnitAPITestsService.dll"]
RUN mkdir -p /opt/
RUN chmod -R 777 /opt/
RUN mkdir -p /opt/download
RUN chmod -R 777 /opt/download
ENV VSTEST_CONNECTION_TIMEOUT 10000
ENV DOCKER_UNIT_TEST_ENVIRONMENT TRUE

当容器工作时,服务成功接收来自 Rabbit 的消息。 有人可以解决这个麻烦吗?

我解决了这个问题。需要正确写入码头工人文件。在组装第二个映像之前,我构建了两个项目,并将发布文件从 build-env publish/文件夹复制到第二个映像中的 app/。

FROM microsoft/dotnet:2.2-sdk AS build-env
WORKDIR /app
COPY . .
RUN dotnet publish ./Operations/ApiTests -c Release -o publish
RUN dotnet publish ./Operations/UnitAPITestsService -c Release -o publish
WORKDIR /app/Operations/ApiTests/
RUN dotnet restore .; exit 0;
RUN dotnet build
WORKDIR /app/Operations/UnitAPITestsService/
RUN dotnet restore .; exit 0;
RUN dotnet build
FROM mcr.microsoft.com/dotnet/core/sdk:2.2
WORKDIR /app
COPY --from=build-env /app .
COPY --from=build-env /app/Operations/ApiTests/publish .
COPY --from=build-env /app/Operations/UnitAPITestsService/publish .
#WORKDIR /app/Operations/UnitAPITestsService
ENTRYPOINT ["dotnet", "UnitAPITestsService.dll"]
RUN mkdir -p /opt/
RUN chmod -R 777 /opt/
RUN mkdir -p /opt/download
RUN chmod -R 777 /opt/download
ENV VSTEST_CONNECTION_TIMEOUT 90000
ENV DOCKER_UNIT_TEST_ENVIRONMENT TRUE

瞧,一切正常。

最新更新