Запуск покрытия с unittest из отдельной папки дает ошибки импорта - PullRequest
3 голосов
/ 16 января 2020

Я пытаюсь запустить покрытие модулем 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 и как Я могу сделать так, чтобы эти тесты нормально работали на обоих? Нужно ли менять синтаксис импорта при использовании покрытия?

...