【问题标题】:How to run .NET unit tests in a docker container如何在 docker 容器中运行 .NET 单元测试
【发布时间】:2017-10-30 07:49:57
【问题描述】:

我有一个包含 MSTest 单元测试的 .NET Core 应用程序。使用这个 Dockerfile 执行所有测试的命令是什么?

FROM microsoft/dotnet:1.1-runtime
ARG source
COPY . .
ENTRYPOINT ["dotnet", "test", "Unittests.csproj"]

文件夹结构为:

/Dockerfile
/Unittests.csproj
/tests/*.cs

【问题讨论】:

    标签: .net docker .net-core visual-studio-2017


    【解决方案1】:

    使用安装了 .NET Core SDK 的基础映像。例如:

    microsoft/dotnet
    microsoft/dotnet:1.1.2-sdk
    

    然后运行dotnet test 控制台命令。这就是为什么需要基于 SDK 的映像的原因 - 您不能在没有 SDK 的基于运行时的映像中运行 dotnet test。这是一个完全可行的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 命令在 docker 镜像构建过程中执行。

    ENTRYPOINT 命令在 docker 容器启动时执行。

    【讨论】:

    • 任何人都知道如何使用“Run dotnet test”中的退出代码使构建失败
    • 有人能澄清一下“test”参数是什么吗?是单元测试方法还是单元测试项目名称,还需要区分运行点和入口点。
    • @eschneider :“test”参数是“dotnet”命令的命令行参数。 RUNENTRYPOINT 命令在此 Dockerfile 中执行相同的操作。区别仅在于 运行测试。 docs.docker.com/engine/reference/builder/#entrypoint
    • 那么有什么迹象表明我的单元测试正在 docker 中运行以及针对什么图像?当我从测试资源管理器运行时,这也有效吗?
    • @JasonRowe 使构建失败设置 Environment.Exit(yourCode) 在您的测试完成时。检查 CI 脚本中的退出代码。
    【解决方案2】:

    对于那些也在为这个问题而苦苦挣扎但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"]
    

    注意:我没有在我的 Dockerfile 中包含 RUN dotnet test,因为如果测试失败并且这不适合我的场景,这将停止构建

    我还有一个 .dockerignore 文件,其内容如下:

    bin/
    obj/
    

    作为参考,这是我的文件夹结构:

    /bin/
    /obj/
    /test/*.cs
    /.dockerignore
    /Dockerfile
    /testing.csproj
    

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 2020-04-22
      • 1970-01-01
      • 2018-09-05
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-21
      相关资源
      最近更新 更多