目前,我为解决方案中的每个文本项目运行DotCover。我想将此更改为只对整个解决方案运行一次DotCover。
我发现这个命令是有效的:
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的方法:
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)路径?
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“随机”冻结:
DotCoverCover( tool => {
tool.DotNetCoreTest(
Paths.SolutionFilePath.ToString(),
new DotNetCoreTestSettings() {
Configuration = configuration,
NoBuild = true,
NoRestore = true
}
);
},
dotCoverOutputFileName,
dotCoverCoverSettings
);它打印了一些测试项目的结果然后什么也没有.
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"
我在一个循环中运行最后一个命令,看看是否可以复制“冻结问题”,但是软化了它的功能。
发布于 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语法DotCoverMerge合并报告。https://stackoverflow.com/questions/68256969
复制相似问题