Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Получение покрытия Python.py для сбора покрытия для модуля, который его импортирует?

Автор вопроса: Richard LevasseurОтветов: 1

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

Я работаю в Windows и люблю создавать сценарии с помощью IDLE. Цикл редактирования-нажатия-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, а не на файл, в котором он запущен.

pythontestingcode-coveragepython-coverage

Ответы

Ответ 1 · рейтинг 1 · Ned Batchelder

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

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

$ coverage run my_prog.py arg1 arg2 ...

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы