如何在 pytest 中修补单个变量值



我有一个函数:

def test():
    url = "/test/pvc/name"
    if "pvc" in url:
        return True
    else:
        return False

现在要测试这个函数,我想修补url变量。我该怎么做?我试过了:

monkeypatch.setattr('url', "/test")

但这似乎行不通。我一直得到:

    def derive_importpath(import_path, raising):
        if not isinstance(import_path, six.string_types) or "." not in import_path:
>           raise TypeError("must be absolute import path string, not %r" % (import_path,))
E           TypeError: must be absolute import path string, not 'url'

尝试将 URL 作为具有默认值的参数获取,如下所示:

def test(url='/test/pvc/name'):
    if "pvc" in url:
        return True
    else:
        return False

现在,当您调用它时,您可以设置所需的 URL。你的函数更抽象和有用。

稍微延伸一下,您可以像这样重写该函数:

def test(url='test/pvc/name'):
    return 'pvc' in url

如果 pvc 在变量中,它将返回True,如果不是,则返回False


此外,monkeypatch用于修补导入的模块。我们从不模拟函数中的变量。它违背了TDD的整个想法。在进行单元测试时,您应该模拟所有导入的依赖项,但您应该保持函数中的变量和数据不变。

最新更新