RAII(Resource Acquisition Is Initialization)是建议的对象构造方法之一。它与单元测试原则有什么关系:在构造函数中没有完成复杂的工作?尤其是没有通过“new”运算符显式创建对象?然而,某些对象的创建有时需要一些更复杂的步骤,并且将工厂传递给构造函数会使 API “脏”,这意味着降低了易读性。同时满足这两个原则的一般方法是什么?
我在 SO 上找到了另一个主题:Stack allocated RAII objects vs DI principle ,然而它看起来是一个更普遍的问题,并没有很好地解释。
最佳答案
是的,在构造函数中创建一个具体的类会使这样做的类复杂化,增加对类的依赖,并使测试变得更加困难。
但是,RAII 不是一种构建对象的方式,而是一种释放资源的方式。析构函数释放资源的类不必构造对象,尽管它通常会这样做:参见 What is meant by Resource Acquisition is Initialization (RAII)? .
因此,如果需要,可以在使用它的类之外创建资源,如果需要,可以使用工厂来这样做,等等,然后让使用资源的类使用 RAII 清理它。
关于unit-testing - RAII 和单元测试原则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23435915/