ck.*_*ck. 2 python twisted.web
我刚刚继承了Twisted Python的一些单元测试,如下所示.
虽然测试有效,但我从概念上并不理解.
鉴于以下示例,有人可以解释以下事项吗?
def setUp(self):
self.listening_port = reactor.listenTCP(8118, server.Site(buildSite()))
def tearDown(self):
self.listening_port.stopListening()
def getUrl(self, extension=''):
return 'http://localhost:%s/%s' % (self.listening_port.getHost().port, extension)
def test(self):
url = self.getUrl('foo')
def printResult(result):
print result
page = getPage(url, method='POST').addCallback(printResult)
return page
Run Code Online (Sandbox Code Playgroud)
为什么这个单元测试"返回页面"?
嗯,它不是很干净.Twisted的Trial unittest期望Deferred为结果,断言为回调.这里回调是printResult,因此对于任何非空字符串,它将被评估为true.我认为应该是:
page = getPage(url, method='POST').addCallback(self.assertTrue)
Run Code Online (Sandbox Code Playgroud)
要么
page = getPage(url, method='POST').addCallback(self.assertIsNotNone)
Run Code Online (Sandbox Code Playgroud)
为什么没有对reactor.start()的调用?
因为TestCase上课会照顾到这一点.而且它也没有使用标准反应器.
由于单元测试避免了真正的I/O和实时,它们通常可以避免使用真正的反应器.唯一的例外是实际反应堆实施的单元测试.协议实现或其他应用程序代码的单元测试不应使用反应器.实际反应堆实施的单元测试不应使用全局反应堆,而应使用twisted.internet.test.reactormixins.ReactorBuilder,以便它们可以自动应用于所有反应堆实施.在任何情况下,新的单元测试都不应使用全局反应器.
| 归档时间: |
|
| 查看次数: |
927 次 |
| 最近记录: |