#sonarqube #nunit #gradle-plugin #sonarqube-scan #opencover
#sonarqube #nunit #gradle-плагин #sonarqube-сканирование #opencover
Вопрос:
Я не получаю никаких результатов от opencover. Все мои тесты nunit выполняются и проходят, просто нет результатов покрытия. проблема, похоже, в фильтрах открытого покрытия, но мы их не устанавливаем. Есть предложения?
CodeCoverage.xml файл содержит группу строк, подобных следующей, которые указывают, что плагин сообщает opencover отфильтровать библиотеки DLL, которые мы пытаемся измерить.
<Module hash="A3-F0-3A-1A-FF-38-D7-EF-A2-55-C9-8B-84-37-CF-CF-00-80-70-23" skippedDueTo="Filter">
<FullName>C:gitlab-runnerbuilds83ebc972activescrptoutputScrpt.Core.dll</FullName>
<ModuleName>Scrpt.Core</ModuleName>
<Classes/></Module>
который имеет правильный путь к файлу dll, но я не понимаю, почему он пропущен из-за фильтрации. Модульные тесты содержатся в dll с именем Scrpt.Test.dll а остальная часть кода находится в других библиотеках DLL, все из которых отфильтровываются.
Я использую следующие плагины
plugins {
id 'com.ullink.msbuild' version '2.15'
id 'com.ullink.nunit' version '1.8'
id 'com.ullink.opencover-nunit' version '1.6'
}
и определения плагинов для nunit и opencover:
nunit {
testAssemblies = [file('output/Scrpt.Tests.dll')]
shadowCopy = false
useX86 = true
ignoreFailures = false
}
opencover {
targetAssemblies = [file('output/Scrpt.dll'),file('output/Scrpt.Core.dll'),file('output/Scrpt.SourceCitations.dll'),file('output/ScrptUtilLib.dll')]
ignoreFailures = false
}
Спасибо за вашу помощь,
-herb
Ответ №1:
Вам необходимо установить фильтр opencover. Фильтр Open cover работает с включающими и эксклюзивными фильтрами.
Первый фильтр всегда должен быть чем-то вроде :
[*]*
значение включает каждую сборку и каждый класс.
затем добавьте свои эксклюзивные фильтры:
[*]* -[AssemblyName]* -[*AnotherName]*
Это очень просто. сначала просто добавьте универсальный инклюзивный фильтр, получите свои результаты, а затем начните постепенно исключать элементы в вашем фильтре один за другим.
Ответ №2:
Ответ на этот вопрос был получен с помощью Франсуа Вальди по адресу https://github.com/Ullink/gradle-opencover-plugin/issues/17
Проблема оказалась в том, что плагин opencover не генерировал coverage.xml результаты. В XML-файле появилось сообщение об ошибке, в котором говорилось, что интересующие меня файлы были пропущены из-за фильтров, но я не смог найти, какие фильтры были причиной этого.
В итоге я заменил плагин opencover задачей, которая выполняет то же самое. Не уверен, почему плагин не сработал, но замена — это, по сути, то же самое, поскольку он вызывает nunit, создает выходной XML-файл покрытия, который затем загружает sonarqube. Кроме того, выполнение этого способа дает вам больше контроля над тем, где заканчиваются файлы.
Немного неудобно, но это работает. Следующее заменило блок opencover в моем первоначальном вопросе.
task opencover(type:Exec) {
executable 'C:\Program Files (x86)\OpenCover\OpenCover.Console.exe'
workingDir file('output')
args "-target:c:\Program Files (x86)\NUnit 2.6.4\bin\nunit-console-x86.exe", "-targetargs:c:\gitlab-runner\builds\83ebc972\0\active\scrpt\output\scrpt.tests.dll /noshadow", '-output:coverage.xml', '-filter: [*]*'
}
кстати, я попытался заменить file(), используемый в targetAssemblies для плагина opencover gradle, но это не дало никакого эффекта. Из того, что я прочитал, должно было сработать следующее.
opencover {
targetAssemblies = ['output/Scrpt.dll','output/Scrpt.Core.dll','output/Scrpt.SourceCitations.dll','output/ScrptUtilLib.dll']
ignoreFailures = false
}