Тестирование резервного импорта в Python - PullRequest
0 голосов
/ 16 февраля 2019

Использование Python 3. В моем приложении используется модуль, который должен быть установлен pip, но если у пользователя не установлен правильный модуль, я хочу предоставить запасной модуль.

Я хотел бы протестировать это без необходимости переключения среды.Отсюда следующее:

Файл a.py

"""
This module would, under ideal circumstances, be installed with pip
but maybe not...
"""
class Foo():

    @staticmethod
    def test():
        return "This is the module we'd like to import"

Файл b.py

"""
This is my own fallback module
"""
class Foo():

    @staticmethod
    def test():
        return "This is the fallback module"

Файл c.py

try:
    from sandbox.a import Foo
except ImportError:
    from sandbox.b import Foo

"""This is the module in my app that would actually use Foo"""

Воттест, d.py

import sys

def test_it():
    sys.modules['a'] = None
    import sandbox.c as c
    s = c.Foo.test()
    assert s == "This is the fallback module"

Это не удается с помощью AssertionError

E       AssertionError: assert 'This is the ...ike to import' == 'This is the fallback module'
E         - This is the module we'd like to import
E         + This is the fallback module

sandbox/d.py:8: AssertionError

Как правильно проверить это, чтобы убедиться, что пользователи никогда не получат ImportError (если онимодуль a.py не установлен), и они имеют функции, предоставляемые резервным модулем b.py в таком случае?

1 Ответ

0 голосов
/ 16 февраля 2019

Как я понял, у вас есть следующая структура:

- dir sandbox
-- file a.py
-- file b.py
-- file c.py
- file d.py

Я попытался заменить sys.modules['a'] = None на sys.modules['sandbox.a'] = None, и это работает.

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