gpt4 book ai didi

python - 如何对依赖 urllib2 的模块进行单元测试?

转载 作者:IT老高 更新时间:2023-10-28 22:18:01 27 4
gpt4 key购买 nike

我有一段代码不知道如何进行单元测试!该模块使用 urllib2 从外部 XML 提要(twitter、flickr、youtube 等)中提取内容。这是它的一些伪代码:

params = (url, urlencode(data),) if data else (url,)
req = Request(*params)
response = urlopen(req)
#check headers, content-length, etc...
#parse the response XML with lxml...

我的第一个想法是腌制响应并加载它以进行测试,但显然 urllib 的响应对象是不可序列化的(它会引发异常)。

仅从响应正文中保存 XML 并不理想,因为我的代码也使用了 header 信息。它旨在作用于响应对象。

当然,在单元测试中依赖外部数据源是一个可怕的想法。

那么我该如何为此编写单元测试呢?

最佳答案

urllib2 有一个名为 build_opener()install_opener() 的函数,您应该使用它们来模拟 urlopen()

import urllib2
from StringIO import StringIO

def mock_response(req):
if req.get_full_url() == "http://example.com":
resp = urllib2.addinfourl(StringIO("mock file"), "mock message", req.get_full_url())
resp.code = 200
resp.msg = "OK"
return resp

class MyHTTPHandler(urllib2.HTTPHandler):
def http_open(self, req):
print "mock opener"
return mock_response(req)

my_opener = urllib2.build_opener(MyHTTPHandler)
urllib2.install_opener(my_opener)

response=urllib2.urlopen("http://example.com")
print response.read()
print response.code
print response.msg

关于python - 如何对依赖 urllib2 的模块进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2276689/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com