Получаете Python's cover.py для сбора покрытия для модуля, который его импортирует? - PullRequest
2 голосов
/ 06 февраля 2012

Я баловался с cover.py, но не могу заставить его собрать покрытие для модуля __main__.

Я нахожусь в Windows и люблю взламывать скриптыиспользуя IDLE.Цикл edit-hit-F5 действительно удобный, быстрый и увлекательный.К сожалению, не похоже, что cover.py может (или хочет) собрать покрытие основного модуля - в приведенном ниже коде сообщается, что данные не собираются.Мой код выглядит так:

import coverage
cov = coverage.coverage()
cov.start()

def CodeUnderTest():
  print 'do stuff'
  return True

assert CodeUnderTest()

cov.stop()
cov.save()
cov.html_report()

У кого-нибудь есть идеи?Я пробовал разные варианты освещения, но безрезультатно.Похоже, что среда, создаваемая IDLE, не очень удобна для покрытия, поскольку sys.modules['__main__'] указывает на файл idle.pyw, а не на файл, на котором он выполняется.

1 Ответ

1 голос
/ 06 февраля 2012

Вы не сказали, какое поведение вы видите, но я ожидаю, что две строки в CodeUnderTest будут отображаться как покрытые, но ни одна из других строк в файле не отображается. Coverage.py не может измерить выполнение, которое произошло до его запуска, и здесь оно не запускается до тех пор, пока модуль не будет выполнен. Например, строка import coverage уже была выполнена к моменту начала покрытия. Кроме того, после начала охвата измерение начинается только после следующего вызова функции.

Простейший способ запустить cover.py - использовать его из командной строки. Таким образом, вы знаете, что это начинается как можно раньше:

$ coverage run my_prog.py arg1 arg2 ...

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

...