如何模拟/存根python方法并根据输入参数返回结果?

时间:2012-09-04 17:07:08

标签: python mocking

我想在外部库方法(urllib.open())上创建一个模拟/存根。我做了一个研究,发现了模拟和存根python库,看起来很好,我可能会使用它们。

尽管如此,我还有一个设计问题:如何创建针对每个输入参数返回各种响应的模拟/存根?

E.g: 如果我有以下呼叫,我需要根据收到的参数返回不同的响应:

ulrllib.open('url1', data={...})
ulrllib.open('url2', data={...})
....

如果至少有10个此类案例,我如何为每个网址和数据输入创建包含错误或不同数据的存根?

1 个答案:

答案 0 :(得分:1)

只需使用python模拟库。 pypi.python.org/pypi/mock

另外,您可以考虑使用url的for循环,而不是:

ulrllib.open('url1', data={...})
ulrllib.open('url2', data={...})
ulrllib.open('url3', data={...})
ulrllib.open('url4', data={...})
ulrllib.open('url5', data={...})
ulrllib.open('url6', data={...})
ulrllib.open('url7', data={...})
ulrllib.open('url8', data={...})
ulrllib.open('url9', data={...})
ulrllib.open('url10', data={...})

你可以使用:

responses = ()#empty list
urls=('url1', 'url2', 'url3', 'url4', 'url5', 'url6', 'url7', 'url8', 'url9', 'url10')
data=('data1', 'data2', 'data3', 'data4', 'data5', 'data6', 'data7', 'data8', 'data9', 'data10')
for i, page in enumerate(urls):
  mydata = urllib.urlencode(data[i])
  x = urllib.open(page, mydata)
  responses.append(str(x.read()))