如何对python类进行单元测试,该类在初始化中创建应该模拟的对象?

2024-10-02 00:22:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我的类在__init__()中创建了一些通过HTTP进行通信的对象。例如:

class StreamController(object):
    def __init__(self, credentials):
        self.listener = StreamListener()
        self.stream = Stream(credentials, self.listener)

    def methods_to_test(self):
        # test this stuff

如何对StreamController进行单元测试,并用模拟对象替换listenerstream变量?我将要对这个东西进行实例测试,但是当它被创建时,它将尝试与服务器通信。我该如何防止这种情况并继续测试它


Tags: 对象testselfhttpstreamobjectinitdef
1条回答
网友
1楼 · 发布于 2024-10-02 00:22:53

一个常见的习惯用法是使用工厂来创建对象:

class StreamController(object):
    _streamListenerFactory = (lambda : StreamListener())
    _streamFactory = (lambda credentials, listener: Stream(credentials, listener)
    def __init__(self, credentials):
        self.listener = _streamListenerFactory()
        self.stream = _streamFactory(credentials, self.listener)
    def methods_to_test(self):
        # test this stuff

如果需要创建mock或stub,只需在测试之前覆盖工厂:

StreamController._streamListenerFactory = (lambda : StreamListenerMock())
StreamController._streamFactory = ...

相关问题 更多 >

    热门问题