В настоящее время есть проект, выполненный с возможностью выполнения покрытия с помощью команды Джанго управлять следующим образом:Как проверить покрытие правильно с Django + Носом
Это приводит в отчете, как следующее:
Name Stmts Miss Branch BrMiss Cover Missing
--------------------------------------------------------------------------
notify.decorators 4 1 0 0 75% 4
notify.handlers 6 1 2 0 88% 11
notify.notification_types 46 39 2 0 19% 8-55, 59, 62, 66
notify.notifications 51 51 0 0 0% 11-141
--------------------------------------------------------------------------
TOTAL 107 92 4 0 17%
Однако проблема с этим отчетом. Это не правильно. Охват означает отсутствие пропусков линий, несмотря на то, что они действительно покрываются испытаниями. Например, если я запускать тесты через nosetests
вместо Джанго управлять командой, я получаю следующий правильный отчет:
Name Stmts Miss Branch BrMiss Cover Missing
-----------------------------------------------------------------------------
notify.decorators 4 0 0 0 100%
notify.handlers 6 0 2 0 100%
notify.notification_types 46 0 2 0 100%
notify.notifications 51 25 0 0 51% 13, 18, 23, 28, 33, 38, 43, 48, 53, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 116, 121, 126, 131, 136, 141
-----------------------------------------------------------------------------
TOTAL 107 25 4 0 77%
Google привел меня в FAQ на покрытие веб-сайта в, http://nedbatchelder.com/code/coverage/faq.html
Q: Почему тела функций (или классов) показываются как выполненные, но линии def нет?
Это происходит потому, что покрытие запускается после того, как функции определены. Строки определения выполняются без измерения покрытия, затем начинается освещение, затем вызывается функция. Это означает, что тело измеряется, но определение самой функции не является.
Чтобы исправить это, начните покрытие раньше. Если вы используете командную строку для запуска вашей программы с охватом, ваша программа будет контролироваться. Если вы используете API, перед импортом модулей, которые определяют ваши функции, вы должны вызвать функцию coverage.start().
Вопрос в том, могу ли я правильно управлять отчетами о покрытии с помощью команды управления Django? Или мне нужно обойти управление, чтобы избежать ситуации, когда покрытие начинается после того, как выполняются «пропущенные» строки?
Это самое удобное решение (хотя и взломанное) и прекрасно и прозрачно работает с django-носом – danigosa