У меня есть проблема с некоторым кодом ctypes, который у меня есть, когда pytest-покрытие перекрывает мое «истинное» тестовое покрытие.
Вот как выглядит модуль (используя фиктивный пример):
# mymod.py
add = clib.add
add.arg_types = [c_int, c_int]
add.res_type = c_int
Проблема в том, что когда я запускаю pyest_coverage
, мой охват кода показывает 100%, даже если python add
никогда не вызывается в моих модульных тестах.Иначе говоря, если я НЕ выполню
#tests/test_mymod.py
assert mymod.add(1,2) == 3
, я хочу, чтобы мое освещение отражало это, то есть я хочу отразить, что add
"на самом деле не проверялось".
ОПЦИИ
Мой модуль не может позволить себе потерять производительность.Одна вещь, о которой я подумал, это сделать либо:
def add(a, b):
# probably really bad performance wise if called many times!!!
_add = clib.add
_add.arg_types = [c_int, c_int]
_add.res_type = c_int
return _add(a,b)
, либо
_add = clib.add
_add.arg_types = [c_int, c_int]
_add.res_type = c_int
def add(a, b):
# questionable performance!!
return _add(a,b)
Но я боюсь, что обе эти реорганизации для целей тестированияповлиять на производительность кода
Любые идеи, как я могу обмануть pytest или покрытие pytest, чтобы не считать add
как охваченное, если только некоторая тестовая функция не вызовет add
??