Создание отчетов OpenCover с помощью TFS 2015 Build Preview

Я использую следующий код для создания отчета о покрытии из задачи сценария 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"

person Steve Johnstone    schedule 18.08.2015    source источник


Ответы (1)


Вероятно, вам нужно заключить аргументы nunit в кавычки, используя `"

& $openCoverPath -target:$nUnitPath -targetargs:"`"$nUnitArgs`"" -filter:$Filter -excludebyattribute:$ExcludeByAttribute -register:user -output:"$SourceDir\CodeCoverage\$XmlOutputPath"

В следующем выпуске OpenCover есть исправление, которое будет обнаруживать, когда вы передаете нераспознанные аргументы. в OpenCover

person Shaun Wilde    schedule 20.08.2015