2012-04-17 62 views
2

我只是继承了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 

回答

6

为什么这个单元测试 '回归页'?

那么,它不是很干净。 Twisted的试验单元测试期望延期结果,并断言为回调。这里的回调是printResult,因此对于任何非空字符串,它将被评估为true。我认为更恰当,应该是:

page = getPage(url, method='POST').addCallback(self.assertTrue) 

page = getPage(url, method='POST').addCallback(self.assertIsNotNone) 

为什么没有任何调用reactor.start()?

因为TestCase班负责。而且它也不使用标准反应堆。

由于单元测试避免了真正的I/O和实时,所以它们通常可以避免使用真正的反应堆。唯一的例外是实际反应堆实施的单元测试 。协议 的实施或其他应用程序代码的单元测试不应使用反应器。 实际反应堆实施的单元测试不应该使用全局反应堆 ,而应该使用 twisted.internet.test.reactormixins.ReactorBuilder,以便它们可以自动应用到所有反应堆实施。在没有 的情况下,新单元测试应该使用全局反应堆。

相关问题