Twisted守护进程单元测试

1 投票
1 回答
1213 浏览
提问于 2025-04-16 06:48

我在工作上开始了一个客户端/服务器项目,使用的是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端口上监听,而只是直接调用你服务、工厂和协议类中的方法。

撰写回答