Отказ от ответственности; начинающий вопрос!Отчет о покрытии кода «запуск кода», но не «код покрыт» отдельными тестовыми модулями
Моя структура проекта, весьма упрощен ради вопроса, выглядит следующим образом:
Project/
|-- main.py
|-- test_main.py
После прочтения Jeff Knupp's blogpost on unit testing и писать ассортимент тестов я хотел бы видеть, сколько мой код в настоящее время было покрыто тестами , Поэтому я установил coverage.py и следующий меня смущает:
$ запустить покрытие main.py (показывает мне отпечатки/входе из сценария)
$ отчет Охват main.py
Имя , Stmts, мисс, Обложка
main.py, 114, 28, 75%
дело в том, я не запускать модульные тесты из главного сценария, и не Я думаю, я должен. Я вручную запускаю все тесты из test_main.py перед фиксацией и знаю, что они не покрывают 75% всех моих утверждений. После прочтения coverage documentation Я сомневаюсь в реализации модульного теста ... нужны ли триггеры main.py, которые запускают тесты?
Так что я попробовал то же самое на моем тестовом скрипте:
$ перспективе охват test_main.py (показывает мне 'OK' пробный запуск для всех тестов)
$ отчет по покрытию test_main.py
Имя, Stmts, мисс, крышка
test_main.py, 8, 0, 100%
Но это просто показывает мне, что я «ударил» 100% моего кода в тестовых заявлениях во время выполнения этого скрипта. Итак, почему тогда покрытие указано в разделе "increase test coverage", если оно просто отображает, какой код был использован.
Мне очень хотелось бы узнать, сколько из моего main.py покрыто test_main.py, и я уверен, что у меня отсутствует базовая концепция. Может кто-нибудь уточнить?
На моей Ubuntu работы машины «выполнение покрытия test_main.py, отчет покрытия» только дает мне отчет о test_main.py. На моей машине Windows, это дает:
Имя, Stmts, мисс, крышка
main.py, 114, 74, 35%
test_main.ру, 8, 0, 100%
TOTAL, 122, 74, 39%
В докладе охват по-прежнему не имеет смысла:
- test_main охватывает 9 из из 134 строк кода и 1 из 10 функций в основном покрытии не составляет 35%
- Почему он сообщает об охвате test_main, это тесты, и было бы странно, если бы это было не на 100% m запускать все тесты, чтобы увидеть мой cov erage ...
- Я делаю что-то неправильно здесь, или этот способ взглянуть на него - это заблуждение, вычисляющее среднее значение «охвата», в то время как суммирование тестов с помощью самого кода не дает понимания, и, по моему мнению, неверно
Трудно ответить, не видя ваш код. Все, что может сделать cover.py, это рассказать вам, какой код вы использовали, и какой код вы могли бы запустить, и показать вам разницу. Вы показали два отчета, оба из которых утверждают, что они касаются main.py, но первый говорит, что есть 114 операторов, а второй говорит, что есть 8 операторов. Это не должно меняться. Вы можете проверить детали? –
@NedBatchelder извините, небольшая ошибка - нижний отчет был релевантен для test_main.py. Я до сих пор не понимаю, насколько охват полезен в контексте * test *, он просто полезен при проверке того, какой код никогда не будет выполняться, или в других целях. Я хочу понять, какие части моего кода * покрыты * (отсюда освещение, которое я думал ...), модульными тестами, но это просто показывает мне, какой код был запущен в двух отдельных отчетах. Таким образом, единственный способ, которым я мог бы выполнить то, что я хочу, с помощью cover.py, - это дублировать весь мой код main.py в test_main.py и протестировать скрипт? – MarcelTon
Вы используете cover.py для измерения исполнения вашего набора тестов. Затем он расскажет вам, какие строки в вашем коде продукта были запущены, а какие нет. Сделайте это: «Запуск покрытия test_main.py, отчет о покрытии». Не помещайте имя файла в отчет о покрытии, если вы не хотите ограничивать отчет только одним файлом. –