有人可以解释这个Twisted单元测试吗?

时间:2012-04-17 16:01:36

标签: python twisted.web

我刚刚继承了Twisted Python的一些单元测试,如下所示。

虽然测试有效,但我从概念上并不理解。

鉴于以下示例,有人可以解释以下事项吗?

  • 为什么这个单元测试'返回页面'?
  • 为什么没有调用reactor.start()?
  • 关于这种方法的优点/缺点的任何评论,也许还有我可以考虑的其他方法?

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

1 个答案:

答案 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实现。没有   新的单元测试应该使用全局反应堆。