Python 3.x 什么是;使用setattr[…],目标为虚线导入字符串;什么意思?
我开始学习mocking,我尝试构建下面的示例(Python 3.8),但我遇到了一个我不理解的错误:Python 3.x 什么是;使用setattr[…],目标为虚线导入字符串;什么意思?,python-3.x,pytest,monkeypatching,Python 3.x,Pytest,Monkeypatching,我开始学习mocking,我尝试构建下面的示例(Python 3.8),但我遇到了一个我不理解的错误: TypeError : use setattr(target, name, value) or setattr(target, value) with target being a dotted import string 我应该如何编写它?您可以访问当前模块,例如通过sys.modules命令。模块名称在\uuuu name\uuuu中设置,因此您可以编写: 导入系统 def test_函
TypeError : use setattr(target, name, value) or setattr(target, value) with target being a dotted import string
我应该如何编写它?您可以访问当前模块,例如通过
sys.modules
命令。模块名称在\uuuu name\uuuu
中设置,因此您可以编写:
导入系统
def test_函数_to_be_tested_返回_str(monkeypatch):
def mockreturn():
返回50.0
monkeypatch.setattr(sys.modules[\uuuuuuu name\uuuuuuuu],“division”,mockreturn)
assert function_to_be_tested()=“这是结果:50.0”
编辑:这实际上是评论中后续问题的答案——如何访问当前模块。@jornsharpe通过链接到来回答实际问题。您可以访问当前模块,例如通过
sys.modules
dict。模块名称在\uu name\uuu
中设置,因此您可以编写:
导入系统
def test_函数_to_be_tested_返回_str(monkeypatch):
def mockreturn():
返回50.0
monkeypatch.setattr(sys.modules[\uuuuuuu name\uuuuuuuu],“division”,mockreturn)
assert function_to_be_tested()=“这是结果:50.0”
编辑:这实际上是评论中后续问题的答案——如何访问当前模块。@jornsharpe通过链接到的来回答实际问题。请参见中的示例,它表示一个带点的字符串,就像导入模块的路径。我先看了文档,但不理解该句子。在我看来,我不需要导入任何模块,因为所有函数都在同一个文件中?那根绳子应该是什么?我尝试了“”、“/”、“”,没有结果……请参见中的示例,它表示一个带点的字符串,就像要导入的模块的路径。我先看了文档,但不理解该句子。在我看来,我不需要导入任何模块,因为所有函数都在同一个文件中?那根绳子应该是什么?我试过了“”、“/”、“”,没有结果……你的答案和例子对我来说非常有意义,非常感谢!你的答案和例子对我来说非常有意义,非常感谢!
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)