Насмешка над методом класса, который используется через экземпляр

Я пытаюсь исправить метод класса, используя mock, как описано в документация. Сам объект Mock работает нормально, но его методы — нет: например, их атрибуты, такие как call_count, не обновляются, хотя атрибут method_callsкласса Mock объект. Что еще более важно, их атрибут 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

Что я здесь делаю неправильно?

РЕДАКТИРОВАТЬ: Передача класса Mockчерез конструктор также не работает, поэтому на самом деле это не связано с функцией patch.

11
задан Erik 16 March 2012 в 11:07
поделиться