扭曲守护进程单元测试

发布于 2024-10-01 13:20:14 字数 2291 浏览 4 评论 0原文

我已经使用 Twisted 在工作中启动了一个客户端/服务器项目(我是新人,所以没有太多经验)。我可能以错误的方式/顺序进行了设置,因为现在我有点被守护进程服务器困住了(使用 twind --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)

可以为生产提供守护进程实现,并为单元测试提供标准流程吗?

I've started a client/server project at work using Twisted (I'm a newcomer, so not much experience). I probably did setup things the wrong way/order, because now I'm a little stuck with a Daemon server (using twistd --python to launch it).

I'm wondering if I've to re-implement the server as a standard process to use it in my unittest module?

Here's part of the code to launch the server as a Daemon in the server module (you'll probably recognize part of krondo's articles in this):

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)

I tried copy/pasting the configuration part in the setUp method:

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

... but of course using trial unittest.py doesn't start it a daemon, so my client can't reach it.

Any advice of how to setup things would be appreciated.

Thanks!

Edit:
Managed to make everything works with this and this, but still feel unsure about the whole thing:

def setUp(self):
    # Configuration
    port = 10000
    iface = 'localhost'

    service = mfxTHServer.TwistedHawkService()
    factory = mfxTHServer.ReceiverFactory(service)
    self.server = reactor.listenTCP(port, factory, interface=iface)

Is it ok to have a daemon implementation for production and standard process for unittest?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

傾旎 2024-10-08 13:20:14

可以为生产提供守护进程实现,并为单元测试提供标准流程吗?

您的单元测试不适用于 Twisted 的守护进程功能。它适用于自定义应用程序/协议/服务器/您实现的任何功能。一般来说,在单元测试中,您希望涉及尽可能少的代码。因此,一般来说,让单元测试守护进程是完全可以的,甚至更好。事实上,您可能想要编写一些单元测试,这些单元测试甚至不侦听真正的 TCP 端口,而只是调用服务、工厂和协议类上的方法。

Is it ok to have a daemon implementation for production and standard process for unittest?

Your unit test isn't for Twisted's daemonization functionality. It's for the custom application/protocol/server/whatever functionality that you implemented. In general, in a unit test, you want to involve as little code as possible. So in general, it's quite okay, and even preferable, to have your unit tests not daemonize. In fact, you probably want to write some unit tests that don't even listen on a real TCP port, but just call methods on your service, factory, and protocol classes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文