from twisted.trial.unittest import TestCase
from twisted.internet import defer, reactor
from cyclone import httpclient
# copied from tornado
_next_port = 10000
def get_unused_port():
"""Returns a (hopefully) unused port number."""
global _next_port
port = _next_port
_next_port = _next_port + 1
return port
class TxTestCase(TestCase):
def get_http_port(self):
"""Returns the port used by the HTTPServer.
A new port is chosen for each test.
"""
if self.__port is None:
self.__port = get_unused_port()
return self.__port
def setUp(self, *args, **kwargs):
self.__port = None
self._app = self.get_app()
self._listener = None
if self._app:
self._listener = reactor.listenTCP(self.get_http_port(), self._app)
return TestCase.setUp(self, *args, **kwargs)
def get_app(self):
return None
def tearDown(self):
if self._listener:
self._listener.stopListening()
@defer.inlineCallbacks
def fetch(self, url, *args, **kwargs):
response = yield httpclient.fetch('http://localhost:%s%s'%(self.get_http_port(), url), *args, **kwargs)
defer.returnValue(response)
不幸的是,目前在旋风中没有任何东西能像
tornado.testing.AsyncHTTPTestCase
。最好的办法是使用Twisted Trial编写单元测试。一种(有点笨拙)的方法是在测试用例中显式地调用self.listener = reactor.listenTCP(<someport>, YourCycloneApplication())
方法中的setUp
,在tearDown
方法中调用self.listener.stopListening()
。在然后,在测试方法内部,可以使用
cyclone.httpclient.fetch
来获取页面。 这远非理想。但到目前为止,这是唯一的出路。在以下是我们目前正在使用的测试我们的cylcone处理器,就像我们对tornado所做的那样:
这样,您就得到了
fetch
方法;)也不需要再进行试验了。在
下面是一个用法示例:
^{pr2}$希望这对你有帮助。在
相关问题 更多 >
编程相关推荐