有无软件包依赖项的测试

时间:2018-07-05 21:22:10

标签: python unit-testing

我希望我的软件包在使用rapidjson和不使用{{3}}的情况下都可以使用,所以我有以下代码:

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 :(得分:0)

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

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