Я пытаюсь запустить покрытие модулем unittest в моем проекте python. Проект имеет следующую структуру:
project/
src/
__init__.py
foo1.py
foo2.py
tests/
__init__.py
data.py
test_foo1.py
test_foo2.py
.venv/
.venv - это виртуальная среда, в которой установлены зависимости проекта, а также модуль покрытия.
В файле "data.py" есть несколько наборов данных, используемых при тестировании и импортируемых в тестовый файл, а также тестируемый модуль. Этот импорт выполняется с использованием следующего кода:
#test_foo1.py
import unittest
from .data import *
from src.foo1 import ClassFoo #Code to be tested
Просто запуск тестов работает нормально с помощью следующей команды (терминал Ubuntu):
~/project $ sudo .venv/bin/python -m unittest tests/test_foo1.py
Проблема заключается в том, что я пытаюсь запустить покрытие с помощью команды
~/project $ sudo .venv/bin/coverage run tests/test_foo1.py
Она начинает выдавать некоторые ошибки импорта, такие как:
Traceback (most recent call last):
File "tests/foo1.py", line 3, in <module>
from .data import *
ImportError: attempted relative import with no known parent package
Когда я беру '.' Исходя из .data (именно так оно и работает только с unittest), кажется, это решает эту проблему и дает следующую проблему:
Traceback (most recent call last):
File "tests/test_foo1.py", line 4, in <module>
from src.foo1 import ClassFoo
ModuleNotFoundError: No module named 'src'
Может кто-нибудь объяснить, почему эти исключения происходят с покрытием, а не с unittest и как Я могу сделать так, чтобы эти тесты нормально работали на обоих? Нужно ли менять синтаксис импорта при использовании покрытия?