注入python类进行测试,无需修改类

时间:2018-02-06 16:36:18

标签: python unit-testing mocking python-mock

我的任务是为我们的生产管道创建单元测试代码,而无需修改生产管道。管道具有写入和读取队列的方法。我使用mock来覆盖那些调用以创建单个"单元"测试。但我最后一部分坚持了下来。

我需要访问管道中创建的对象,但创建它的方法不会返回该对象。将对象设置为self以使其在方法返回后保留在内存中也是不可接受的。

我们想知道在运行时是否有一种方法可以注入类方法,这样我就可以在方法返回之前检索生产对象。

我在下面创建了一个虚拟示例,但方法是相同的。如果您有任何疑问或者我没有解释清楚,请告诉我。感谢。

class production(object):
    def __init__(self):
        self.object_b = 'Test Object'

    def run(self):
        "Other lines of code"
        object_a = self.create_production_object()
        "Other lines of code"
        "Test object here"
        return 0




    def create_production_object(self):
        return 'Production Object'

test_prod_class = production()
test_prod_class.run()
assert(test_prod_class.object_a, 'Production Object')

1 个答案:

答案 0 :(得分:1)

如何覆盖创建对象的方法,以便它还将对象存储在self中?

class MockProduction(production):

    def create_production_object(self):
        self.object_a = super(MockProduction, self).create_production_object()
        return self.object_a