代码之家  ›  专栏  ›  技术社区  ›  Xavier

扭曲守护程序unittest

  •  1
  • Xavier  · 技术社区  · 15 年前

    我想知道是否必须将服务器重新实现为一个标准流程,才能在unittest模块中使用它?

    下面是在服务器模块中将服务器作为守护进程启动的部分代码(您可能会认识到 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)
    

    我尝试在安装方法中复制/粘贴配置部分:

    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')
    

    ... 但是当然要用 试用单元test.py 不会启动守护进程,所以我的客户端无法访问它。

    任何关于如何设置的建议都会很感激。

    编辑: 设法让一切都能正常工作 this ,但仍然对整个事情感到不确定:

    def setUp(self):
        # Configuration
        port = 10000
        iface = 'localhost'
    
        service = mfxTHServer.TwistedHawkService()
        factory = mfxTHServer.ReceiverFactory(service)
        self.server = reactor.listenTCP(port, factory, interface=iface)
    

    1 回复  |  直到 15 年前
        1
  •  0
  •   Jean-Paul Calderone    15 年前

    有一个用于生产的守护进程实现和unittest的标准进程可以吗?

    您的单元测试不是针对Twisted的守护功能。它用于定制应用程序/协议/服务器/您实现的任何功能。通常,在单元测试中,您希望 尽可能地编码。因此,一般来说,进行单元测试是很好的,甚至更好 守护。实际上,您可能希望编写一些单元测试,这些测试甚至不监听真正的TCP端口,而只是调用服务、工厂和协议类上的方法。