RAII和单元测试原理

时间:2014-05-02 19:53:19

标签: unit-testing raii design-principles tradeoff

RAII(资源获取是初始化)是构建对象的建议方法之一。它如何与单元测试原则相关:构造函数中没有完成复杂的工作?尤其是“新”运算符没有明确创建对象?但是,有时创建某些对象需要一些更复杂的步骤,并且将工厂传递给构造函数会使API“变脏”,这意味着降低了易读性。同时满足这两个原则的一般方法是什么?

我在SO上发现了另一个主题:Stack allocated RAII objects vs DI principle,但它看起来像是一个更普遍的问题而且没有得到很好的解释。

1 个答案:

答案 0 :(得分:5)

是的,在构造函数中创建一个具体的类会使执行此操作的类复杂化,为类添加依赖项,并使其更难测试。

但是,RAII不是构建对象的方式,而是释放资源的方式。析构函数释放资源的类不必构造对象,尽管它通常会这样做:请参阅What is meant by Resource Acquisition is Initialization (RAII)?

因此,如果需要,可以在使用它的类之外创建资源,如果需要,可以使用工厂等,但是然后让使用该资源的类使用RAII清理它。