Я использую следующий код для создания отчета о покрытии из задачи сценария powershell в TFS 2015 Build Preview. Я могу запустить его на сервере сборки, и он правильно генерирует отчет, но когда он запускается как часть сборки, он жалуется, что нет файлов pdb.
Нет результатов, это может быть по ряду причин. Наиболее распространенные причины:
1) отсутствуют PDB для сборок, соответствующих фильтру, просмотрите выходной файл и обратитесь к руководству по использованию (Usage.rtf) о фильтрах.
2) профилировщик может быть зарегистрирован неправильно, обратитесь к руководству по использованию и переключателю -register.
Немного погуглив, я обнаружил, что /noshadow должно было быть достаточно, но кажется, что параметры для nunit игнорируются. Я предполагаю, что они игнорируются, потому что команда /nologo должна удалять информацию об авторских правах при печати, но в выводе консоли я все еще вижу отображаемую информацию.
Также использование выходного каталога сборки в качестве рабочего каталога также должно было исправить это, но использование Set-Location не решило проблему во время сборки.
Это сценарий, который я сейчас запускаю:
Param
(
[string] $SourceDir = $env:BUILD_SOURCESDIRECTORY,
[string] $UnitTestDir = "",
[string] $UnitTestDll ="",
[string] $Filter = "",
[string] $ExcludeByAttribute = "System.CodeDom.Compiler.GeneratedCodeAttribute",
[string] $nUnitOutputPath = "Output.txt",
[string] $nUnitErrorOutputPath = "Error.text",
[string] $XmlOutputPath = "_CodeCoverageResult.xml",
[string] $ReportOutputPath = "_CodeCoverageReport"
)
$openCoverPath = "E:\BuildTools\OpenCover.4.5.3723\OpenCover.Console.exe"
$nUnitPath = "E:\BuildTools\NUnit.Runners.2.6.4\tools\nunit-console.exe"
$reportGeneratorPath = "E:\BuildTools\ReportGenerator.2.1.1.0\ReportGenerator.exe"
$nUnitArgs = "$SourceDir\$UnitTestDir\$UnitTestDll /noshadow /nologo"
Write-Host "[Debug] Setting location to $SourceDir\$UnitTestDir"
Set-Location $SourceDir\$UnitTestDir
if (!(Test-Path $SourceDir\CodeCoverage)) {
New-Item $SourceDir\CodeCoverage -type directory
}
Write-Host "[Debug] Running unit tests from $SourceDir\$UnitTestDir\$UnitTestDll"
Write-Host "[Debug] Command: $openCoverPath -target:$nUnitPath -targetargs:""$nUnitArgs"" -filter:$Filter -excludebyattribute:$ExcludeByAttribute -register:user -output:""$SourceDir\CodeCoverage\$XmlOutputPath"""
& $openCoverPath -target:$nUnitPath -targetargs:"$nUnitArgs" -filter:$Filter -excludebyattribute:$ExcludeByAttribute -register:user -output:"$SourceDir\CodeCoverage\$XmlOutputPath"
Write-Host "[Debug] Generating report"
Write-Host "[Debug] Command: $reportGeneratorPath ""-reports:$SourceDir\CodeCoverage\$XmlOutputPath"" ""-targetdir:$SourceDir\CodeCoverage\$ReportOutputPath"""
& $reportGeneratorPath -reports:$SourceDir\CodeCoverage\$XmlOutputPath -targetdir:$SourceDir\CodeCoverage\$ReportOutputPath
Write-Host "[Debug] Finished running tests and generating report"