python中with类的_python'with'语句及其在类中的使用

这是一个非常有趣的问题。正如BrenBarn所指出的,unittest框架不支持做你想做的事情,但在我看来,没有什么特别的原因可以让它适应。setUp/tearDown对是其他没有生成器的语言的遗留问题。在

下面的代码定义了一个新的“ContextTest”类,该类将setUp和tearDown方法合并到一个生成器中,该生成器同时生成和销毁测试的上下文。您可以将您的with语句以及任何其他样板放入context()方法中。在#!/usr/bin/python3.3

import unittest

class ContextTest(unittest.TestCase):

"""A unit test where setUp/tearDown are amalgamated into a

single generator"""

def context(self):

"""Put both setUp and tearDown code in this generator method

with a single `yield` between"""

yield

def setUp(self):

self.__context = self.context()

next(self.__context)

def tearDown(self):

for _ in self.__context:

raise RuntimeError("context method should only yield once")

from contextlib import closing

from urllib.request import urlopen

class MyTest(ContextTest):

def context(self):

with closing(urlopen('http://www.python.org')) as self.page:

yield

def testFoo(self):

self.assertIsNotNone(self.page)

if __name__=='__main__':

unittest.main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值