python - 使用和不使用包依赖项进行测试

标签 python unit-testing

我希望我的包在有或没有 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/

相关文章:

c++ - CppUnit,非常简单的测试代码崩溃了,为什么?

java - 将值添加到 Java ENUM 以进行测试

c# - 如何在 Entity Framework 中模拟存储库和工作单元模式?

python - 根据 pandas 中的条件创建更多行

python - Python 中不准确的大斐波那契数

python - thrift hbase 客户端 - 支持过滤器和协处理器

python - 在 Python 中使用调试器捕获段错误

java - 如何在java项目中运行python文件?

java - 设置私有(private)静态字段的值

python - 在 Python 中模拟不可变类的成员