如何使用XUnit在Dockerfile中运行测试

时间:2019-05-03 16:12:11

标签: docker asp.net-core dockerfile xunit.net

因此,我在一个文件夹(src)中有一个ASP.NET项目,在另一个文件夹(tests)旁边的文件夹中有一个测试项目。我想要实现的目标是能够运行测试并使用docker部署应用程序,但是我真的很困。

现在,src文件夹中有一个Dockerfile,它可以构建应用程序并很好地进行部署。 tests文件夹中还有一个用于测试项目的Dockerfile,应该可以运行我的测试。

tests/Dockerfile当前看起来像这样:

FROM microsoft/dotnet:2.2.103-sdk AS build
WORKDIR /tests
COPY ["tests.csproj", "Tests/"]
RUN dotnet restore "Tests/tests.csproj"
WORKDIR /tests/Tests
COPY . .
RUN dotnet test

但是如果我运行docker build,测试会失败,我猜是因为缺少要测试的应用程序代码。 我得到很多:

The type or namespace name 'MyService' could not be found (are you missing a using directive or an assembly reference?

我的.csproj文件中确实有一个项目引用,那么可能是什么问题?

1 个答案:

答案 0 :(得分:0)

您的测试代码引用了一些尚未复制到映像的文件(包含类型MyService)。 发生这种情况是因为您的COPY . .指令是在WORKDIR /tests/Tests指令之后执行的,因此,您正在复制/tests/Tests文件夹中的所有内容,而不是复制的引用代码(根据您的描述位于该文件夹中) src文件夹。

应该在COPY . .指令之后的第二行中执行FROM来解决您的问题。这样,所有必需的文件都将正确复制到映像中。如果您以这种方式进行操作,则可以将Dockerfile简化为以下形式(未经测试):

FROM microsoft/dotnet:2.2.103-sdk AS build
COPY . .                       # Copy all files
WORKDIR /tests/Tests           # Go to tests directory
ENTRYPOINT ["dotnet", "test"]  # Run tests (this will perform a restore + build before launching the tests)