を使用して、生活をよりシンプルに (つまり、コードをより読みやすく) してみてはいかがでしょうか@inlineCallbacks
。
実際、Deferred
パフォーマンスや特定のユース ケースでどうしても必要な場合を除き、s を直接使用することは避け、代わりに常に s を使用することをお勧めします。これ@inlineCallbacks
により、コードを通常のコードのように保つことができます。 、非ブロッキング動作の恩恵を受けながら:
from twisted.internet import reactor
from twisted.web.client import Agent
from twisted.internet.defer import inlineCallbacks
from twisted.trial import unittest
from twisted.web.http_headers import Headers
from twisted.internet.error import DNSLookupError
class SomeTestCase(unittest.TestCase):
@inlineCallbacks
def test_smth(self):
ag = Agent(reactor)
response = yield ag.request('GET', 'http://example.com/', Headers({'User-Agent': ['Twisted Web Client Example']}), None)
self.assertEquals(response.code, 200)
@inlineCallbacks
def test_exception(self):
ag = Agent(reactor)
try:
yield ag.request('GET', 'http://exampleeee.com/', Headers({'User-Agent': ['Twisted Web Client Example']}), None)
except DNSLookupError:
pass
else:
self.fail()
Trial が残りの処理を行う必要があります (つまりDeferred
、テスト関数から返される s を待機します ( @inlineCallbacks
-wrapped callable も "魔法のように" a を返します — まだ慣れていない場合は、Deferred
さらに読むことを強くお勧めします)。@inlineCallbacks
Deferred
PS また、テスト関数から s を返し、終了する前にそれらが起動されるまでノーズを待機させる、nosetests 用の Twisted "プラグイン" もあります。