Тестирование с и без зависимости от пакета - PullRequest
0 голосов
/ 06 июля 2018

Я хочу, чтобы мой пакет можно было использовать как с rapidjson, так и без него, поэтому у меня есть следующий код:

try:
    import rapidjson as json  # https://github.com/python-rapidjson/python-rapidjson
    def pp_json(x, fd):
        "Pretty-print object to stream as JSON."
        return json.dump(x, fd, sort_keys=True, indent=1)
except ImportError:
    import json            # https://docs.python.org/3/library/json.html
    def pp_json(x, fd):
        "Pretty-print object to stream as JSON."
        return json.dump(x,fd,sort_keys=True,indent=1,separators=(',',':'))

мой вопрос: как я могу проверить этот файл как с и без rapidjson?

Я бы предпочел не делать это вручную, как

$ coverage3 run --source=pyapp -m unittest discover --pattern *_test.py
$ pip3 uninstall python-rapidjson
$ coverage3 run --source=pyapp -m unittest discover --pattern *_test.py
$ pip3 install python-rapidjson

PS. На самом деле я не уверен, что это стоит затраченных усилий, поэтому я бы принял ответ, который безоговорочно говорит мне добавить python-rapidjson к requirements.txt и забыть все это. ; -)

1 Ответ

0 голосов
/ 06 июля 2018

С помощью библиотеки mock вы можете смоделировать, что quickjson не установлен в конкретном тесте, установив заплату sys.modules dict.

def test_with_import_error(self):
    with mock.patch.dict('sys.modules', {'rapidjson': None}):
       #test code with ImportError here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...