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