Покрытие ветвей для выражений в OpenCover

Работает ли покрытие ветвей для следующего утверждения?

Я ожидал красный индикатор, потому что первое выражение имеет только тесты, где оно ложно и не истинно.

tax.Voided = P_tax.Amount == 1012312870000.42M || P_tax.Amount < 0.00M;

Первое выражение всегда ложно, а второе иногда верно: ReportGenerator snapshot


person Ryan Andres    schedule 07.09.2011    source источник


Ответы (2)


Не путайте отчеты ReportGenerator с выходными данными OpenCover XML; хотя, пока OpenCover не начнет работать над своими собственными визуальными эффектами для отчетов, ReportGenerator в настоящее время является лучшим, что вы найдете на данный момент.

Ваша проблема здесь заключается в том, что инструмент отчетности не сообщает (красный/зеленый) охват на основе охвата ветвей только при покрытии последовательности.

Вам нужно будет просмотреть обзор охвата ветвей по методу (который кратко изложен в верхней части отчета). OpenCover получает информацию о покрытии из).

Примечание. OpenCover не знает, на каком языке вы написали код, все, что он видит, — это созданный IL.

person Shaun Wilde    schedule 08.09.2011
comment
Я не уверен, зачем кому-то отрицать ответ создателя OpenCover... - person Igal Tabachnik; 08.09.2011
comment
Спасибо, что указали на это, @Shaun, я нашел информацию о ветке в XML: ‹Посещенный метод=true cyclomaticComplexity=2 sequenceCoverage=100 branchCoverage=50› ... ‹BranchPoints› ‹BranchPoint vc=1 uspid=1348 ordinal=0 offset =64 path=0 /› ‹BranchPoint vc=0 uspid=1349 ordinal=1 offset=64 path=1 /› ‹/BranchPoints› ... ‹/Method› Я не могу найти документацию, объясняющую эти атрибуты, не могли бы вы указать мне в правильном направлении? - person Ryan Andres; 09.09.2011
comment
@ryan-andres - на данный момент документации не так много, так как я ее не писал :) самое близкое, что у меня есть, это scubamunki.blogspot.com/2011/08/ (и часть вторая, покрывающая переключатель) вся информация берется из созданного IL - так что вам может понадобиться ILSpy или отражатель под рукой - person Shaun Wilde; 09.09.2011
comment
Я только что понял, что охват филиалов - это не то, что я имел в виду. Допустим, у меня есть только одно выражение, var voided = сумма ‹ 0,00M;, как я могу проверить, что есть 2 теста для его истинных и ложных значений. Охват отделения будет иметь количество посещений, но не гарантирует, что были проверены как истинные, так и ложные значения. Мой обходной путь: do, bool voided; if(amount ‹ 0.00M) {voided = true;} else {voided = false}, потому что здесь будет работать покрытие последовательности. - person Ryan Andres; 09.09.2011
comment
Я думаю, что единственный способ - это написать сценарий, который проверял бы каждую точку ветвления с одинаковым смещением (инструкции IL) и проверял наличие vc > 0 для каждого пути (обратите внимание, что у переключателей может быть несколько путей). - person Shaun Wilde; 10.09.2011

Если ваш инструмент покрытия не понимает, что у вас может быть несколько интересных "покрываемых" объектов внутри строки, вы, скорее всего, получите отчет о том, что ваша линия покрыта, если какой-либо объект покрытия в этой строке покрыт.

Инструменты, которые файлы классов инструментов, AFAIK, ограничены таким образом, потому что файлы классов содержат только информацию, относящуюся к коду класса к исходным строкам, а не к частичным строкам.

Наш инструмент покрытия тестами Java (и другие члены нашего семейства инструментов покрытия тестами) не инструментировать файлы кода класса. Скорее, они инструментируют исходный код и точно отслеживают информацию о части строки (начальная строка/столбец, конечная строка/столбец).

У нашего инструмента не возникнет проблем с отображением охвата отдельных частей заявления.

person Ira Baxter    schedule 07.09.2011