dotnet测试仅针对解决方案测试项目

时间:2017-09-07 09:12:31

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

使用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镜像的唯一其他想法。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

如果我们在谈论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