用右边 return 修补同一个对象

patch the same object with the right return

我正在寻找对同一个对象打补丁 2 次的可能性,但在不同的方法中,我做了一个例子以加深理解。出于一个非常具体的原因,我正在尝试使用 monkeypatch 来执行此操作,而不仅仅是通过重新归因来更改属性,例如:foo.bar ="fobar2"。如果那是可能的或不可能的。提前谢谢你

class Foo:
    def __init__(self):
        self.bar = str()
        self.bar = str()
    def foo(self):
        self.bar = requests.get('https://foobar.com')
        return self.bar

    def foo2(self):
        self.bar2 = requests.get('https://foobar2.com')
        return self.bar2

def test_bar(monkeypatch):
    def mockreturn(requests):
        return "fobar"
    monkeypatch.setattr(requests, 'get', mockreturn)
    foo = Foo()
    assert foo.foo() == 'fobar'
    assert foo.foo2() == "fobar2"

与其为 get 设置 return 值,不如尝试将其设为函数。可能是这样的:

def mock_get(url):
    url_response_map = {'https://foobar.com': 'fobar'. 'https://foobar2.com': 'foobar2'}
    return url_response_map(url)

monkeypatch.setattr(requests, 'get', mock_get)