"use setattr [...] with target being a dotted import string " 是什么意思?
What does "use setattr [...] with target being a dotted import string " mean?
我开始学习 mocking,我尝试构建下面的示例 (Python 3.8),但我收到一个我不明白的错误:
TypeError : use setattr(target, name, value) or setattr(target, value) with target being a dotted import string
import random
def division():
nb = random.randrange(0, 2)
return 100 / nb # this is on purpose ;-)
def function_to_be_tested():
result = division()
return f"This is the result :{result}"
def test_function_to_be_tested_returns_str(monkeypatch):
def mockreturn():
return 50.0
monkeypatch.setattr(division, mockreturn)
assert isinstance(function_to_be_tested(), str)
应该怎么写?
例如,您可以通过 sys.modules
字典访问当前模块。模块名称设置在__name__
,所以可以这样写:
import sys
def test_function_to_be_tested_returns_str(monkeypatch):
def mockreturn():
return 50.0
monkeypatch.setattr(sys.modules[__name__], 'division', mockreturn)
assert function_to_be_tested() == "This is the result :50.0"
编辑:这实际上是评论中后续问题的答案——如何访问当前模块。 @jonrsharpe 通过链接到 documentation.
回答了实际问题
我开始学习 mocking,我尝试构建下面的示例 (Python 3.8),但我收到一个我不明白的错误:
TypeError : use setattr(target, name, value) or setattr(target, value) with target being a dotted import string
import random
def division():
nb = random.randrange(0, 2)
return 100 / nb # this is on purpose ;-)
def function_to_be_tested():
result = division()
return f"This is the result :{result}"
def test_function_to_be_tested_returns_str(monkeypatch):
def mockreturn():
return 50.0
monkeypatch.setattr(division, mockreturn)
assert isinstance(function_to_be_tested(), str)
应该怎么写?
例如,您可以通过 sys.modules
字典访问当前模块。模块名称设置在__name__
,所以可以这样写:
import sys
def test_function_to_be_tested_returns_str(monkeypatch):
def mockreturn():
return 50.0
monkeypatch.setattr(sys.modules[__name__], 'division', mockreturn)
assert function_to_be_tested() == "This is the result :50.0"
编辑:这实际上是评论中后续问题的答案——如何访问当前模块。 @jonrsharpe 通过链接到 documentation.
回答了实际问题