我使用Pytest,我想测试一个具有由函数
设置的动态属性的类这是一个例子
file_1.py
def fn():
return 'foo'
class Cls(object):
cls_attr = fn()
test_file_1.py
import file_1
def test_cl1(monkeypatch):
monkeypatch.setattr('file_1.fn', lambda: 'bar')
assert file_1.fn() == 'bar'
cls = file_1.Cls()
assert cls.cls_attr == 'bar' # <-- fail here
我认为python之前“编译”了这个类,然后运行monkeypatch。
有没有办法用monkeypatched函数“重新加载”类?
答案 0 :(得分:2)
我不这么认为......但为什么不改为Cls.cls_attr
呢?
ETA:也许您想要使用的代替monkeypatch是mock。有一个pytest-mock插件也可能对它有用。