当前位置: 首页 > 面试题库 >

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

孔运良
2023-03-14
问题内容

我有一段代码,我不知道如何进行单元测试!该模块使用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是不理想的,因为我的代码也使用标头信息。它旨在作用于响应对象。

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

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


问题答案:

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


 类似资料:
  • 上面的匕首2.0当量是多少? 您可以在GitHub上看到我的项目及其单元测试。

  • 我有以下方法,它采用UNIX时间戳并以天、小时或分钟的形式返回年龄。我想用JUnit单元测试它,但我不确定如何开始这样做,因为当前时间不断变化。有什么建议吗?谢谢! 方法如下: }

  • 问题内容: 在对Angular工厂进行单元测试(使用Karma + Jasmine)时,如何将存根依赖项注入到要测试的工厂中? 这是我的工厂: 实例化我的工厂时需要。 这是我的测试: 注意:我知道这允许用于控制器,但是我没有看到与之等效的工厂。 问题答案: 我知道有两种方法可以完成这样的事情: 使用和匿名模块注入模拟。 注入您要模拟的服务,并使用茉莉的间谍功能提供模拟值。 第二个选项仅在您确切知道

  • 问题内容: 我试图在将其他模块作为依赖项的模块中进行单元测试控制器代码的单元化,但是还没有弄清楚如何正确模拟它们。 我正在使用Jasmine Framework,并使用Karma(Testacular)运行测试。 模块代码 规格代码 我得到的错误是Karma是“ no module af.widgets”,因此显然我没有对模块依赖项进行模拟。有什么提示吗? 问题答案: 如果要模拟声明一个或多个服务

  • 我有一个示例方法(我需要编写测试用例)如下所示, 我想模拟getConfig方法并返回一个特定的字符串值。getConfig是Kotlin对象中方法,如下所示, 下面是我尝试的测试 我没有得到任何错误,但是getConfig方法没有被嘲笑。执行实际的实现。我也试过使用Powermockito。请帮帮我