我有一个函数:
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的整个想法。在进行单元测试时,您应该模拟所有导入的依赖项,但您应该保持函数中的变量和数据不变。