如何在pytest中monkeypatch动态类属性

时间:2015-02-26 11:35:22

标签: python pytest monkeypatching

我使用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函数“重新加载”类?

1 个答案:

答案 0 :(得分:2)

我不这么认为......但为什么不改为Cls.cls_attr呢?

ETA:也许您想要使用的代替monkeypatch是mock。有一个pytest-mock插件也可能对它有用。