У меня есть несколько тестов, которые выполняются с кодом python, который обращается к базе данных, используя последнюю версию PyCharm. Все мои тесты проходят успешно и (кроме #pragma no cover lines) ожидают 100% покрытия. В некоторых случаях код не помечается как попадание, хотя на самом деле я знаю, что это потому, что я установил точки останова в тестовом прогоне и пошагово проходил через код.
На рисунке ниже показан один пример, 104,106 и 107 помечены как не пораженные, но они наиболее определенно поражены. Я снял снимок экрана, на котором показана линия в точке останова на линии, которая, по-видимому, не помечена как хит.
Вот функция, которая находится в модуле biz (нет класса / объекта прямой вызов функции), который имеет неполное покрытие, хотя при запуске для тестирования я могу пройти по одной строке:
def get_schedule_d():
try:
with connection() as conn:
with conn.cursor() as cursor:
query = f"""LONG QUERY"""
cursor.execute(query)
columns = [column[0] for column in cursor.description]
for row in cursor:
yield dict(zip(columns, row))
except pyodbc.ProgrammingError: # pragma: no cover
return
Вот тестовый пример, который вызывает его. biz.py имеет несколько функций, которые обращаются к базе данных. Это не класс или объект, это просто функции в модуле с именем biz.
def test_get_schedule():
sc = list(biz.get_schedule('2019-12-9'))
scd = list(biz.get_schedule_d('2019-12-9'))
assert len(sc) == 95
assert len(scd) == 95
Здесь указывается неполное покрытие ... с точкой разрыва, достигающей линии, отмеченной без покрытия:
![enter image description here](https://i.stack.imgur.com/6A07v.png)