【问题标题】:dotnet test only test projects on solutiondotnet test 仅在解决方案上测试项目
【发布时间】:2018-02-15 23:02:20
【问题描述】:

使用 Visual Studio 2017 和 Dotnet Core 2.0 SDK 我有一个包含多个项目的解决方案。其中一些是测试项目,一些是源项目。

我可以在根解决方案方向运行dotnet test,它会尝试在解决方案的所有项目中发现测试。

但是,源项目没有测试,因此会显示错误。测试全部运行并通过,除了进程的退出代码为 1。这意味着我们的 CI 构建失败。

有没有办法让它只在解决方案的测试项目上运行?它们位于文件系统和解决方案目录中的测试目录中,但我找不到任何过滤它们的方法。

我已经编写了一个 Powershell 脚本来为测试文件夹中的每个项目运行它,但是我们的 CI 服务器使用的是 Linux 和 Docker 映像microsoft/dotnet:2.0-sdk,因此 Powershell 脚本不会在那里运行。

我可以用 Bash 编写它,但它无法在 Windows 上运行。

我必须为同时具有 dotnet 和 powershell 的构建制作自定义 docker 映像的唯一其他想法。

【问题讨论】:

    标签: unit-testing powershell continuous-integration .net-core visual-studio-2017


    【解决方案1】:

    这是一个没有修复的已知问题。问题中列出了一些解决方法:https://github.com/Microsoft/vstest/issues/411

    【讨论】:

      【解决方案2】:

      好消息,截至目前 .NET Core 2.2 已修复此问题。提交:https://github.com/Microsoft/vstest/pull/1745

      【讨论】:

        【解决方案3】:

        如果我们谈论的是dotnet test,这就是相关问题:

        https://github.com/microsoft/vstest/issues/1129

        a comment 建议采用这种解决方法:

        1. 在解决方案的同一目录下添加Directory.Build.targets文件,包含:

          <Project>
            <Target Name="VSTestIfTestProject">
              <CallTarget Targets="VSTest" Condition="'$(IsTestProject)' == 'true'" />
            </Target>
          </Project>
          
        2. 在同一目录中添加一个after.[YourSolution].sln.targets 文件,将名称中的[YourSolution] 替换为您的实际解决方案名称,包含:

          <Project>
            <Target Name="VSTest">
              <MSBuild Projects="@(ProjectReference)" Targets="VSTestIfTestProject" />
            </Target>
          </Project>
          

        a later comment 他提到他blogged the details of how this works

        【讨论】:

        • 非常有帮助的总结!这帮助我们大大简化了 CI 任务。
        猜你喜欢
        • 1970-01-01
        • 2016-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-27
        • 1970-01-01
        • 2018-03-22
        • 2019-05-26
        相关资源
        最近更新 更多