Запуск тестов из cover.py против запуска покрытия из тестового бегуна

В течениеCoverage.py с Недом Бэтчелдером Питон и тестовый подкаст Брайан и Нед кратко обсудили, что если вам нужно запустить тесты с покрытием,желательно запускать тесты изcoverage.py выполнениеcoverage run в отличие от вызова тестового бегуна с покрытием. Почему это так и в чем разница?

Чтобы поместить некоторый контекст в это: в настоящее время я используюnose выполнить тест и выполнить тесты с помощьюnosetests инструмент командной строки с--with-coverage вариант:

$ nosetests --with-coverage --cover-html

Должен ли я сделать это черезcoverage run -m вместо?

$ coverage run -m nose
$ coverage report
 mwchase07 июл. 2016 г., 05:48
Я не знаю, правильно ли это (поэтому я не публикую это как ответ), но мое внутреннее предположение состоит в том, что если вы используете покрытие напрямую, то вы обеспокоены охватом и носом, и вы не иметь дополнительную зависимость от плагина. Меньше сцепления и меньше версии для отслеживания.
 mgilson07 июл. 2016 г., 05:55
«Вызов тестового участника с покрытием» - вы не определились с тем, о ком вы говорите (и, возможно, их тоже не было в подкасте - я не перечислил это). Я полагаю, что в случае с тестовым прогоном вы доверяете тестирующему запускать механизм покрытия в нужное время (например, перед импортом материала для тестирования). Если вы вызываете покрытие напрямую, то вы знаете, что все настроено на использование покрытия с самого начала, и каждая строка будет отслеживаться так, как вы этого хотите.

Ответы на вопрос(1)

Решение Вопроса

что я уникально квалифицирован, чтобы ответить на этот вопрос :)

В комментариях mwchase и mgilson правы: использование плагина означает, что вы зависите от правильности и понятности поведения этого плагина. Во имя полезности плагины будут иметь свою собственную логику, которая, возможно, была лучшей идеей, когда они были написаны, но организатор теста и / или cover.py, возможно, тем временем изменились. Плагины, как правило, не так хорошо обслуживаются, как другие компоненты. Если вы можете избежать их, вам есть о чем подумать.

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

 alecxe07 июл. 2016 г., 15:02
По какой-то причине в большинстве примеров "как использовать перенос / pytest с покрытием" в Интернете показано, как использовать бегун с плагином покрытия, не упоминая, что вы также можете использоватьcoverage run и это вообще лучший способ. Еще раз спасибо!

Ваш ответ на вопрос