В настоящее время у меня есть проект с похожим деревом, использующий Pycharm 2019.3, python 3.7.4 и pytest 5.3.5
rootproject
|
|--elements
| |
| --liquid
| | |
| | - water.py
| |
| --solid
| |
| - earth.py
|
-- test_foobar
|
--bar_test
| |
| -- test_bar.py
| |
| -- test_bar_bar.py
|
--foo_test
|
-- test_foo.py
|
-- test_foo_foo.py
, где earth.py и water.py имеют соответствующие классы Земля и Вода
И настройка .pth в моей папке site-packages для папки liquid и solid. (Я знаю, что это, вероятно, не лучшая практика, но потерпите меня здесь)
Тестовый модуль для подтверждения экземпляра выполняется следующим образом:
import pytest
# one module has this import
from water import Water
def test_type():
element = Water() # or Earth()
assert isinstance(element, Water) # or Earth
if __name__ == '__main__':
pytest.main()
В настоящее время я использую среду pytest для запуска мое тестирование с использованием bar_test и foo_test в качестве пакетов тестирования для различных пакетов в исходной папке (в настоящее время не отображается в дереве проекта).
Вот проблема.
Когда я запускаю pytest только для test_bar. py или test_package, bar_test, утверждение isinstance способно правильно проверить экземпляр элемента как класс Water / Earth.
Однако, когда я запускаю тест в test_foobarspy, я получаю ошибку от pytest, что элемент не класса Water , а вместо класса elements.liquid.water.Water .
Я собираюсь отладить это в ближайшие несколько дней, но я немного сбит с толку, что это вообще происходит в первую очередь, потому что проект работал нормально три недели go, если бы я запускал pytest через свою IDE f rom test_foobar, и никто не изменил соглашение об импорте.
Может кто-нибудь помочь мне с объяснением, почему это происходит в первую очередь для pytest и что нужно сделать, чтобы исправить это, кроме удаления .pth и вставки полного уровня в тестовый модуль?