Утверждение isinstance во время pytest дает полный уровень класса вместо локально импортированного класса? - PullRequest
0 голосов
/ 25 февраля 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...