Den*_*nko 17
您可以轻松启动服务器,然后在测试用例中访问它.gevent 自己的测试套件正好用于测试gevent的内置服务器.
例如:
class SimpleServer(gevent.server.StreamServer):
def handle(self, socket, address):
socket.sendall('hello and goodbye!')
class Test(unittest.TestCase):
def test(self):
server = SimpleServer(('127.0.0.1', 0))
server.start()
client = gevent.socket.create_connection(('127.0.0.1', server.server_port))
response = client.makefile().read()
assert response == 'hello and goodbye!'
server.stop()
Run Code Online (Sandbox Code Playgroud)
使用0的端口值意味着服务器将使用任何可用的端口.启动服务器后,选择的实际值bind可用作server_port属性.
StreamServer支持SSL太,传递keyfile和certfile参数构造函数,它会包装每个插座,SSLObject将它传递给你的处理程序之前.
如果您不使用StreamServer并且您的服务器基于Greenlet,那么确实产生它是您应该做的.不要忘记在测试用例结束时杀死它.
启动服务器,并生成一个greenlet在快速操作GEVENT,比创建一个新的线程或进程更快,你可以很容易地为每个测试用例一个新的服务器.只要不再需要服务器就不要忘记清理.
我相信不需要模拟任何gevent API,只需将它用作服务器就可以了,并且客户可以愉快地生活在同一个流程中.
模拟和存根很棒,但有时您需要将其提升到下一级集成.由于产生服务器,甚至是假的服务器,可能需要一些时间,因此可以考虑使用单独的测试套件(称为集成测试).
"测试它就像你要使用它"是我的指南,如果你嘲笑和存根以至于你的测试变得微不足道,它就没那么有用了(尽管几乎所有的测试都比没有测试好).如果您担心处理错误的SSL证书,请务必制作一些不好的证书并编写测试夹具,然后将它们提供给它们.如果这意味着产生服务器,那就这样吧.也许如果你的错误足够,它将导致重构,使其以另一种方式可测试.
| 归档时间: |
|
| 查看次数: |
10613 次 |
| 最近记录: |