Python -模拟函数外部对象的行为



我有三个文件:

main.py

from util import ResultGetter
result_getter = ResultGetter()
result = result_getter.get_result()
def function_a():
return result

util.py

class ResultGetter:
def get_result(self):
return False

和test_main.py

进口主要从_pytest。导入monkeypatch

def test_function_a():
def get_new_result():
return True
monkeypatch = MonkeyPatch()
monkeypatch.setattr(main.result_getter, "get_result", get_new_result)
result = main.function_a()
assert(result == True)

我试图用get_new result覆盖get_result的行为,并使断言为真。但是,它仍然从util.py中拉入False。

我是python中的新手,所以任何帮助都会很感激。

这里的问题是下面的代码块是在函数的作用域之外设置的:

result_getter = ResultGetter()
result = result_getter.get_result()

我把main.py改成:

from util import ResultGetter
def function_a():
return ResultGetter().get_result()

它起作用了。这里的问题是,您无法使用MonkeyPatch甚至patch函数访问函数外部对象的值,例如:

with patch("__main__.ResultGetter.get_result") as get_new_result:
get_new_result.return_value= True
result = function_a()

由于它是事先设置的,因此您可以从对象result_getter进行测试。

最新更新