unit-testing - RAII 和单元测试原则

标签 unit-testing raii design-principles tradeoff

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/

相关文章:

android - 使用远程调解器和分页源对具有分页 3 的存储库进行单元测试

c++ - RAII 范围内的分配

c# - 将逻辑放入异常中可以吗?

c++ - 我应该使用 C++ 中的哪个包装类来进行自动化资源管理?

c# - 一个 child 实现接口(interface)而另一个 child 不实现接口(interface)是否违反了里氏替换原则?

java - 这是一种反模式还是违反了一些设计原则?

javascript - Angular 2 Http请求 promise 返回区域对象而不是实际数据

javascript - 测试 Angular 绑定(bind)

java - 随机算法的 TDD

c++ - 采用预创建值的所有者对象?错误的设计?