Docker Compose运行Redis搭配.NET Core集成测试无结果问题咨询
问题修复方案
你遇到的核心问题是测试执行逻辑的运行时机错误、容器日志输出配置缺失,按以下步骤修改即可看到测试结果:
1. 修正Dockerfile的测试执行时机
当前你把dotnet test写在RUN指令中,该指令仅在镜像构建阶段执行,docker compose up时如果镜像已缓存就不会重新触发执行,自然看不到测试输出。调整为CMD指令让测试在容器启动时运行:
FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build WORKDIR /src COPY ["tests/RedisTest/RedisTest.csproj", "tests/RedisTest/"] RUN dotnet restore "tests/RedisTest/RedisTest.csproj" COPY . . # 将RUN改为CMD,容器启动时才执行测试,同时新增控制台日志输出配置 CMD ["dotnet", "test", "/src/tests/RedisTest/RedisTest.csproj", "-c", "Release", "--logger", "trx;LogFileName=test_results.trx", "--logger", "console;verbosity=normal"]
CMD和下方compose配置中的entrypoint二选一即可,无需同时配置
2. 调整docker-compose.yml配置
新增日志输出、测试结果挂载、Redis就绪等待的相关配置:
version: '3.4' services: redis-service: image: redis container_name: redis restart: on-failure ports: - "6379:6379" test-service: image: ${DOCKER_REGISTRY-}redistest depends_on: - redis-service build: context: . dockerfile: tests/RedisTest/Dockerfile # 关闭日志缓冲,保证测试输出实时打印到终端 tty: true # 挂载本地目录,持久化保存测试结果报告 volumes: - ./test-results:/src/tests/RedisTest/TestResults # 等待Redis完全启动后再执行测试,避免连接失败直接退出 entrypoint: ["/bin/sh", "-c", "sleep 3 && dotnet test /src/tests/RedisTest/RedisTest.csproj -c Release --logger \"trx;LogFileName=test_results.trx\" --logger \"console;verbosity=normal\""]
3. 调整启动命令
执行以下命令启动服务,强制重新构建镜像、测试容器退出时自动终止所有服务并输出全量日志:
docker compose up --build --abort-on-container-exit
执行完成后可以直接在终端查看测试执行日志,也可以在本地当前目录的test-results文件夹中拿到trx格式的测试报告文件。
4. 历史日志查询方法
如果测试容器已经退出,可直接执行以下命令查看历史执行日志:
# 先查询所有容器,获取测试容器的ID/名称 docker ps -a # 查看对应容器的历史输出 docker logs <测试容器ID/名称>
内容的提问来源于stack exchange,提问作者Haha
相关产品推荐
相关产品推荐

