Что представляет собой полное покрытие кода, когда я вызываю dotCover на этапе сборки MSTest в TeamCity?

Что считается 100 %, когда я вызываю dotCover на этапе сборки MSTest в TeamCity? Это 100% весь скомпилированный код? Это весь код всех сборок, которых коснулись тесты? Это все классы, которых коснулись тесты?

Когда я вызываю dotCover из этапа сборки TeamCity MSTest, на котором выполняется My.Tests.dll, какие строки кода отслеживаются?


person Community    schedule 16.11.2012    source источник


Ответы (2)


dotCover предоставляет отчеты только о покрытии на уровне операторов, в то время как другие инструменты, такие как NCover, также включают покрытие функций и ветвей.

На этапе сборки TeamCity MSTest вы можете указать, для каких сборок вы хотите получить отчет о покрытии в поле «Фильтры». Это позволяет вам просто указать исключение для шаблона .Tests или просто включить одну сборку. Дополнительные сведения см. в документации TeamCity: http://confluence.jetbrains.net/display/TCD7/JetBrains+dotCover

Я считаю, что если вы не укажете никаких фильтров, весь код во всех сборках, которые были загружены в CLR, будут включены (вы должны вызвать загрузку сборки из кода, который вы вызываете, поэтому некоторые сборки могут быть не включены, это просто ленивая загрузка CLR). Это связано с тем, что такие инструменты, как dotCover, используют API профилирования CLR и не настраивают ваш код заранее. Обратите внимание, что dotCover исключит сборки из GAC.

person Jonathon Rossi    schedule 16.11.2012
comment
Либо используйте код в этой сборке в модульном тесте (ссылки в VS недостаточно), либо явно выполните Assembly.Load("MyAssembly") в модульном тесте. - person Jonathon Rossi; 17.11.2012

Не уверен, что полностью понял ваш вопрос, но все равно попробую. Насколько я понимаю, 100% покрытие означает, что каждая строка кода в проекте выполняется вашими тест-кейсами. По сути, это означает, что вы обеспечили передачу управления через каждую строку кода в вашем проекте.

В общем, я никогда не видел 100% покрытия, так как очень сложно протестировать каждый путь кода. Рассмотрим, например, различные типы исключений, которые обрабатываются вашим кодом. Как вы используете блок catch для каждого исключения в каком-то тестовом примере? Вам нужно будет как-то имитировать исключение, что не всегда просто.

person Raam    schedule 16.11.2012
comment
Я это знаю, но какова реальная вселенная кода, составляющая 100%? Если у меня x% покрытия, x% ЧЕГО? - person ; 16.11.2012
comment
x% от общего количества строк кода. Предположим, что у вас есть 100 строк кода, тогда 60% означает, что 60 строк кода покрыты, а 40 строк — нет. - person Raam; 16.11.2012
comment
Мой вопрос о том, как определяется, что у меня есть 100 строк кода. - person ; 16.11.2012
comment
Прежде чем покрытие кода может быть запущено, есть этап инструментирования, когда инструмент покрытия будет выполнять свою задачу, подсчитывая все строки кода, а затем заглушая ваш код, чтобы отслеживать доступ к каждой строке кода. Затем на этапе отчетности инструмент покрытия кода будет генерировать статистику о том, сколько всего строк кода было и сколько было покрыто. Если вы хотите узнать больше об инструментарии, вот несколько хороших ссылок blogs.msdn.com/b/phuene/archive/2007/05/03/ doc.froglogic.com/squish-coco/2.0/codecoverage.html - person Raam; 16.11.2012
comment
Я попытаюсь еще больше уточнить свой вопрос: когда я вызываю dotCover из этапа сборки TeamCity MSTest, на котором выполняется My.Tests.dll, какие строки кода отслеживаются? - person ; 16.11.2012