"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.

回答了实际问题