TeamCity中的FAKE(F# Make)dotCover覆盖率问题

4

我有一个假的构建脚本,其中包含使用DotCoverNUnit3扩展的DotCover覆盖率步骤:

let filters = ""

!! (buildDir @@ "/*.UnitTests.dll")
    |> DotCoverNUnit3 (fun p -> 
        { p with
            Output = artifactsDir @@ "NUnitDotCover.snapshot"
            Filters = filters }) nunitOptions

快照生成成功,但TeamCity构建中的覆盖率概述未显示。我尝试在生成快照后调用DotCoverReport。
DotCoverReport (fun p -> 
    { p with 
        Source = artifactsDir @@ "NUnitDotCover.snapshot"
        Output = artifactsDir @@ "NUnitDotCover.xml"
        ReportType = DotCoverReportType.Xml }) true

这将生成预期的XML报告,但是覆盖率概述不会出现在构建概述页面中。

顺便说一下 - 我不确定DotCoverReport方法末尾的布尔参数是什么,在FAKE文档中找不到参考。我尝试切换值,但没有任何区别。

有人知道我如何让TeamCity捡起DotCover报告吗?


1
从这里https://github.com/fsharp/FAKE/blob/master/src/app/FakeLib/DotCover.fs,我可以看到bool是指是否在任务失败时使整个构建失败。该参数没有名称,因为`DotCoverReport`返回一个柯里化函数。为了文档化,它应该明确地接收和传递命名参数。 - TheQuickBrownFox
啊,我明白了,那么bool就是buildParamsAndExecute函数的failBuild参数。 - Dan Ellis
1个回答

2

找到了解决方案。

在查阅了许多TeamCity文档后,我发现了这个页面:https://confluence.jetbrains.com/display/TCD9/Manually+Configuring+Reporting+Coverage

其中描述了使用服务消息来指向TeamCity的快照。

所以,最终我不需要DotCoverReport,只需要快照:

对于dotCover,您应该发送到由dotCover.exe cover命令生成的快照文件的路径。

这是我的目标结果:

let artifactsDir = environVarOrDefault "ARTIFACT_DIR" (currentDirectory @@ "artifacts")

let nunitOptions nUnit3Defaults =
{ NUnit3Defaults with
    TimeOut = TimeSpan.MaxValue
    WorkingDir  = artifactsDir }

Target "TestCoverage" (fun _ ->
    let filters = ""

    !! (buildDir @@ "/*.UnitTests.dll")
        |> DotCoverNUnit3 (fun p -> 
            { p with
                Output = artifactsDir @@ "NUnitDotCover.snapshot"
                Filters = filters }) nunitOptions

    tracefn "##teamcity[importData type='dotNetCoverage' tool='dotcover' path='%s']" (artifactsDir @@ "NUnitDotCover.snapshot") 
)

嗨,我尝试使用这个,但它会出现一个错误,即“nunitOptions未定义”。 - user7739833
1
@johnfernandes 我认为dan-ellis必须在外部范围内声明nunitOptions。如果您没有要设置的选项,您可以将“nunitOptions”替换为“id”。 - Joachim Chapman
1
@joachim-chapman 正确,@johnfernandes 我已经更新了我的答案,并加入了定义 nunitOptions 的代码。 - Dan Ellis
这里的 path='%s' 是什么意思? - KMittal
1
@KMittal path='%s' 是提供给 tracefn 的格式字符串的一部分,其中 %s 会被替换为快照文件路径,该路径是 tracefn 函数调用的第二个参数。可以将其视为字符串替换,我们将 %s 替换为快照文件的路径,tracefn 执行字符串替换,然后将结果字符串写入命令行。 - Dan Ellis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接