我刚刚继承了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
答案 0 :(得分:6)
为什么这个单元测试'返回页'?
嗯,它不是很干净。 Twisted的Trial unittest期望Deferred为结果,断言为回调。这里的回调是printResult
,因此对于任何非空字符串,它将被评估为true。我认为应该更合适:
page = getPage(url, method='POST').addCallback(self.assertTrue)
或
page = getPage(url, method='POST').addCallback(self.assertIsNotNone)
为什么没有对reactor.start()的调用?
因为TestCase
类负责这一点。它也没有使用标准反应堆。
由于单元测试避免了真正的I / O和实时,它们通常可以 避免使用真正的反应堆。唯一的例外是单元测试 用于实际的反应堆实施。协议的单元测试 实现或其他应用程序代码不应使用reactor。 实际反应堆实施的单元测试不应使用全局 反应堆,但应该使用 twisted.internet.test.reactormixins.ReactorBuilder所以他们可以 自动应用于所有reactor实现。没有 新的单元测试应该使用全局反应堆。