Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 什么是;使用setattr[…],目标为虚线导入字符串;什么意思?_Python 3.x_Pytest_Monkeypatching - Fatal编程技术网

Python 3.x 什么是;使用setattr[…],目标为虚线导入字符串;什么意思?

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_函

我开始学习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_函数_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)