有时候,测试用例需要调用某些依赖于全局配置的功能,或者这些功能本身又调用了某些不容易测试的代码(例如:网络接入)。fixture monkeypatch
可以安全的设置/删除一个属性、字典项或者环境变量,甚至改变导入模块时的sys.path
路径。
monkeypatch
提供了以下方法:
- monkeypatch.setattr(obj, name, value, raising=True)
- monkeypatch.delattr(obj, name, raising=True)
- monkeypatch.setitem(mapping, name, value)
- monkeypatch.delitem(obj, name, raising=True)
- monkeypatch.setenv(name, value, prepend=False)
- monkeypatch.delenv(name, raising=True)
- monkeypatch.syspath_prepend(path) monkeypatch.chdir(path)
所有的修改将在测试用例或者fixture
执行完成后撤销。raising
参数表明:当设置/删除操作的目标不存在时,是否上报KeyError
和AttributeError
异常。
猴子补丁主要有以下几个用处:
- 在运行时替换方法、属性等
- 在不修改第三方代码的情况下增加原来不支持的功能
- 在运行时为内存中的对象增加patch而不是在磁盘的源代码中增加