【发布时间】:2021-02-25 15:43:08
【问题描述】:
我发现我经常想要具有复杂初始化的 Python 对象:
class Foo(object):
def __init__(self, thing):
self.complicated_processing_A(thing)
self.complicated_processing_B(thing)
然后在我的代码中创建对象,所有复杂的处理就完成了:
f = Foo(thing)
这很好,只是测试 Foo 类真的很烦人,因为你需要做很多模拟。
另一种选择是更改__init__,这样它就不会做太多,但是当我使用这个类时,我需要执行额外的步骤:
f = Foo(thing)
f.complicated_processing_A(thing)
f.complicated_processing_B(thing)
有没有一种隐藏复杂类细节的好方法,同时又有干净的测试代码?
【问题讨论】:
-
一个可选参数,只有在设置为
True时才会在构造函数中进行复杂的处理?这也默认为True? -
@Chase,尽管很简单,但这似乎是一个值得回答的问题。开箱即用的好解决方案。
-
另一个选项是模拟
complicated_processing方法,以防您不能或不想更改测试代码。如果你可以更改代码,我宁愿将所有复杂的初始化分解成一个可以模拟的方法,而不是引入一个仅用于测试的参数。
标签: python unit-testing testing mocking