2

以下に示すように、TwistedPythonに関するいくつかの単体テストを継承しました。

テストは機能しますが、概念的には理解できません。

以下の例で、誰かがそれについて次のことを説明できますか?

  • なぜこのユニットテストは「リターンページ」なのですか?
  • なぜ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
4

1 に答える 1

6

この単体テストで「戻るページ」をテストするのはなぜですか?

うーん、あまりきれいではない。Twisted の Trial unittest は、コールバックとして assert を使用して、結果として Deferred を期待します。ここでコールバックは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 を使用して、すべてのリアクター実装に自動的に適用できるようにする必要があります。いかなる場合でも、新しいユニット テストでグローバル リアクターを使用しないでください。

于 2012-04-17T16:37:23.683 に答える