Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ASP.NET Core中作为Docker build的一部分运行测试_Docker_Unit Testing_Docker Multi Stage Build - Fatal编程技术网

在ASP.NET Core中作为Docker build的一部分运行测试

在ASP.NET Core中作为Docker build的一部分运行测试,docker,unit-testing,docker-multi-stage-build,Docker,Unit Testing,Docker Multi Stage Build,我试图将单元测试作为docker build过程的一部分来运行,我偶然发现了两个资源: (由第一个引用) 基本上,如果我理解正确的话,他们建议的要点是,在构建最终docker形象的过程中,运行这样的测试: # First stage FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env LABEL test=true # Copy files RUN dotnet test <project-or-solution> -

我试图将单元测试作为docker build过程的一部分来运行,我偶然发现了两个资源:

  • (由第一个引用)
基本上,如果我理解正确的话,他们建议的要点是,在构建最终docker形象的过程中,运行这样的测试:

# First stage
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
LABEL test=true
# Copy files
RUN dotnet test <project-or-solution> --logger trx --results-directory /test-results
# publish the app etc.

# Second stage
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime
COPY --from=build-env ...
但是,这里发生了一些事情:如果一个或多个测试失败,当我创建
测试容器时,
/testresults
目录不存在;我认为原因在于,由于负责运行测试的中间容器中的测试失败,整个Docker构建失败,因此,中间容器中的更改没有提交到映像,只有在单元测试成功后,
/test results
才能在
--filter=label=test=true

我还看到创建了一个带有
入口点的独立图像,以便能够运行测试


docker
中运行C#单元测试的正确且推荐的方法是什么?

好吧,简单的问题是docker希望所有代码命令在构建过程中都返回0。因此,理论上,您可以将
dotnet测试
封装在bash脚本之类的东西中,该脚本将始终返回0。然而,通常的设计是,如果测试失败,构建应该失败。当我这样做时,我只是让测试在CI上运行,docker构建是构建管道中的后续步骤。我猜,你也可以在你创建的一个单独的docker容器中运行测试。谢谢@zaitsman的回复,我同意你的观点,这里似乎有点鸡毛蒜皮的问题:),但是是的,我想看看是否可以使用一个单独的容器来运行测试,简单的问题是docker希望所有代码命令在构建过程中都返回0。因此,理论上,您可以将
dotnet测试
封装在bash脚本之类的东西中,该脚本将始终返回0。然而,通常的设计是,如果测试失败,构建应该失败。当我这样做时,我只是让测试在CI上运行,docker构建是构建管道中的后续步骤。我想,你也可以在你创建的单独的docker容器中运行测试。谢谢@zaitsman的回复,我同意你的观点,这里似乎有个鸡毛蒜皮的问题:),但是,是的,我正在尝试看看是否可以使用单独的容器来运行测试。你看了这里: