Twisted守护进程单元测试
我在工作上开始了一个客户端/服务器项目,使用的是Twisted(我是新手,所以经验不多)。我可能在设置上搞错了顺序,现在在用守护进程服务器(通过twistd --python来启动)时有点卡住了。
我在想,是否需要把服务器重新实现成一个标准进程,这样才能在我的单元测试模块中使用它呢?
这是我在服务器模块中启动守护进程的部分代码(你可能会认出这是krondo的一些文章中的内容):
class TwistedHawkService(service.Service):
def startService(self):
''''''
service.Service.startService(self)
log.msg('TwistedHawkService running ...')
# Configuration
port = 10000
iface = 'localhost'
topService = service.MultiService()
thService = TwistedHawkService()
thService.setServiceParent(topService)
factory = ReceiverFactory(thService)
tcpService = internet.TCPServer(port, factory, interface=iface)
tcpService.setServiceParent(topService)
application = service.Application("TwistedHawkService")
topService.setServiceParent(application)
我试着把配置的部分复制到setUp方法里:
from mfxTwistedHawk.client import mfxTHClient
from mfxTwistedHawk.server import mfxTHServer
class RequestTestCase(TestCase):
def setUp(self):
# Configuration
port = 10000
iface = 'localhost'
self.topService = service.MultiService()
thService = mfxTHServer.TwistedHawkService()
thService.setServiceParent(self.topService)
factory = mfxTHServer.ReceiverFactory(thService)
tcpService = internet.TCPServer(port, factory, interface=iface)
tcpService.setServiceParent(self.topService)
application = service.Application("TwistedHawkService")
self.topService.setServiceParent(application)
def test_connection(self):
mfxTHClient.requestMain('someRequest')
... 但当然使用trial unittest.py并不会以守护进程的方式启动,所以我的客户端无法连接到它。
如果有关于如何设置的建议,我会非常感激。
谢谢!
编辑: 我通过这个和这个让一切都能正常工作了,但对整个事情还是有点不确定:
def setUp(self):
# Configuration
port = 10000
iface = 'localhost'
service = mfxTHServer.TwistedHawkService()
factory = mfxTHServer.ReceiverFactory(service)
self.server = reactor.listenTCP(port, factory, interface=iface)
在生产环境中使用守护进程实现,而在单元测试中使用标准进程,这样可以吗?
1 个回答
0
在生产环境中使用守护进程的实现,单元测试中使用标准流程,这样可以吗?
你的单元测试并不是为了测试Twisted的守护进程功能,而是为了测试你自己实现的应用程序、协议、服务器等功能。一般来说,在单元测试中,你希望涉及的代码尽可能少。因此,通常来说,让你的单元测试不使用守护进程是完全可以的,甚至是更好的选择。实际上,你可能还希望写一些单元测试,这些测试根本不在真实的TCP端口上监听,而只是直接调用你服务、工厂和协议类中的方法。