首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Cake运行DotCover dotnet测试

使用Cake运行DotCover dotnet测试
EN

Stack Overflow用户
提问于 2021-07-05 13:25:10
回答 1查看 349关注 0票数 0

目前,我为解决方案中的每个文本项目运行DotCover。我想将此更改为只对整个解决方案运行一次DotCover。

我发现这个命令是有效的:

代码语言:javascript
复制
C:\_git\MyApp\build\tools\JetBrains.dotCover.CommandLineTools.2021.1.3\tools\dotCover.exe dotnet --output=C:\Temp\report.xml --reporttype=xml -- test "C:\_git\MyApp\MyApp.sln"

我的构建脚本是用Cake编写的,我喜欢在Cake内部执行这个命令。但是,在网上,我只能为这样的单个测试项目找到运行DotCover的方法:

代码语言:javascript
复制
var dotCoverCoverSettings = new DotCoverCoverSettings();
dotCoverCoverSettings.WithAttributeFilter( "System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute" );

DotCoverCover( tool => {
  tool.DotNetCoreTest(
    "test. dll",
    new DotNetCoreTestSettings() {                    
      Configuration = configuration
    }
  );
  },
  "out.xml",
  dotCoverCoverSettings
);

Cake中是否有一种方法可以使用dotnet测试来运行解决方案文件的第一个DotCover命令?

我知道StartProcess,但我更喜欢一种特定的方法来运行DotCover。如果StartProcess是唯一的选项,那么是否有一个内置的方式来解析由蛋糕下载的dotCover exe (NuGet package #tool nuget:?package=JetBrains.dotCover.CommandLineTools)路径?

代码语言:javascript
复制
StartProcess(
@"C:\_git\MyApp\build\tools\JetBrains.dotCover.CommandLineTools.2021.1.3\tools\dotCover.exe",
new ProcessSettings {
    Arguments = new ProcessArgumentBuilder()
        .Append( "dotnet" )
        .Append( @"--output=C:\Temp\report.dotCover.dcvr" )
        .Append( "--reporttype=XML" )
        .Append( @"-- test ""C:\_git\MyApp\MyApp.sln""" )
    }
);

编辑:

正如@Nils所建议的那样,将解决方案文件作为参数传递给DotNetCoreTest有效。但是,当使用以下代码调用时,DotCover“随机”冻结:

代码语言:javascript
复制
DotCoverCover( tool => {
    tool.DotNetCoreTest(
      Paths.SolutionFilePath.ToString(),
      new DotNetCoreTestSettings() {                    
        Configuration = configuration,
        NoBuild = true,
        NoRestore = true
      }
    );
    },
    dotCoverOutputFileName,
    dotCoverCoverSettings
);

它打印了一些测试项目的结果然后什么也没有.

代码语言:javascript
复制
Passed!  - Failed:     0, Passed:    51, Skipped:     0, Total:    51, Duration: 220 ms - Proj1.Test.dll (net5.0)
Passed!  - Failed:     0, Passed:    26, Skipped:     0, Total:    26, Duration: 247 ms - Proj2.Test.dll (net5.0)
Passed!  - Failed:     0, Passed:    28, Skipped:     0, Total:    28, Duration: 249 ms - Proj3.Test.dll (net5.0)
Passed!  - Failed:     0, Passed:    31, Skipped:     0, Total:    31, Duration: 123 ms - Proj4.Test.dll (net5.0)
Passed!  - Failed:     0, Passed:   124, Skipped:     0, Total:   124, Duration: 3 s - Proj5.Test.dll (net5.0)
Passed!  - Failed:     0, Passed:   660, Skipped:     0, Total:   660, Duration: 5 s - Proj6.Test.dll (net5.0)

问题可能是Cake使用其他参数运行DotCover:

C:/_git/MyApp/build/tools/JetBrains.dotCover.CommandLineTools.2021.1.3/tools/dotCover.exe Cover /TargetExecutable="C:/Program Files/dotnet/dotnet.exe" /TargetArguments="test \"../MyApp.sln\" --configuration Release --no-build --no-restore" /Output="C:/Temp/MyApp.sln.dotCover.dcvr"

JetBrains (https://youtrack.jetbrains.com/issue/DCVR-9681)的论点“推荐”

C:\_git\MyApp\build\tools\JetBrains.dotCover.CommandLineTools.2021.1.3\tools\dotCover.exe dotnet --output=C:\Temp\report.html --reporttype=html -- test "C:\_git\MyApp\MyApp.sln"

我在一个循环中运行最后一个命令,看看是否可以复制“冻结问题”,但是软化了它的功能。

EN

回答 1

Stack Overflow用户

发布于 2021-07-05 14:02:24

您是否尝试过将解决方案的完整路径设置为DotNetCoreTest的第一个参数?(也就是说,给出解决方案而不是项目)

最后,DotNetCoreTester只是将其作为第一个参数传递给dotnet test。所以..。根据dotnet-测试文档的说法,这可以是[<PROJECT> | <SOLUTION> | <DIRECTORY> | <DLL>]

也许蛋糕DotNetCoreAliases上的文档不太准确。

编辑:

虽然DotNetCoreTester可以很好地处理作为参数的解决方案,因此能够同时运行多个测试项目,但dotCover用于.NET框架测试(在DotCoverCover中称为)无法处理这个问题。

链接您跟踪-问题中给出的解决方案是使用dotCover.exe dotnet,即目前还没有在Cake中实现的用于dotCover核心的.NET语法

看来你有三种选择:

  • 使用上面提到的StartProcess语法
  • 对多个项目使用dotCover方法,如文件中所述:搜索解决方案中的所有测试项目,单独覆盖每个测试项目,最后运行DotCoverMerge合并报告。
  • 创建一个蛋糕项目中的问题来描述缺少的功能。(最理想的情况是,开始进行公关以实现这一目标。)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68256969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档