模拟通过实例使用的类方法

Eri*_*rik 11 python unit-testing mocking

我正在尝试使用mock来修补类方法,如文档中所述.Mock对象本身工作正常,但它的方法不能:例如call_count,即使method_callsMock对象的属性是,它们的属性也不会更新.更重要的是,它们的return_value属性被忽略:

class Lib:
    """In my actual program, a module that I import"""
    def method(self):
        return "real"

class User:
    """The class I want to test"""
    def run(self):
        l = Lib()
        return l.method()

with patch("__main__.Lib") as mock:
    #mock.return_value = "bla" # This works
    mock.method.return_value = "mock"
    u = User()
    print(u.run())

>>> 
mock
<MagicMock name='Lib().method()' id='39868624'>
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

编辑:通过Mock构造函数传递一个类也不起作用,所以这与patch函数没有关系.

Eri*_*rik 18

我发现了我的错误:为了配置我的mock实例的方法,我必须使用mock().method而不是mock.method.

class Lib:
    """In my actual program, a module that I import"""
    def method(self):
        return "real"

class User:
    """The class I want to test"""
    def run(self):
        l = Lib()
        return l.method()

with patch("__main__.Lib") as mock:
    #mock.return_value = "bla" # This works
    mock().method.return_value = "mock"
    u = User()
    print(u.run())
Run Code Online (Sandbox Code Playgroud)