我有三个文件:
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
进行测试。