我希望我的软件包在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而忘了整个过程。 ;-)

最佳答案

使用mock library,可以通过修补sys.modules字典来模拟在特定测试中未安装RapidJSON。

def test_with_import_error(self):
    with mock.patch.dict('sys.modules', {'rapidjson': None}):
       #test code with ImportError here

关于python - 有无软件包依赖项的测试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51200093/

10-12 05:25