【发布时间】:2021-09-16 06:49:10
【问题描述】:
目前,我为解决方案中的每个文本项目运行 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是唯一的选择,是否有内置的方法来解析cake下载的dotCover exe(NuGet包#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"
我在循环中运行最后一个命令,看看我是否可以重现“冻结问题”,但它确实有效。
【问题讨论】:
标签: c# unit-testing .net-core cakebuild dotcover