如何在pytest

时间:2019-06-18 21:58:40

标签: python python-2.7

我有一个功能:

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'

1 个答案:

答案 0 :(得分:3)

尝试将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的整体思想背道而驰。在进行单元测试时,应该模拟所有导入的依赖关系,但应保持函数内的变量和数据不变。