C++14 对私有成员进行单元测试(取消)分配

C++14 unit testing (de)allocation of a private member

本文关键字:单元测试 取消 分配 成员 C++14      更新时间:2023-10-16

我有一个deactivate()方法,除其他事项外,它应该释放类的私有成员(最终是std::vectorresize(0)+shrink_to_fit()- 但这并不重要(。

鉴于测试无法访问私有成员进行检查,我如何进行单元测试,该测试是否通过deactivate方法解除了成员的分配?

我试图避免依赖注入,因为代码对性能至关重要,并且我对通过引用/指针的间接和内联优化的潜在损失持谨慎态度。 但是,如果有一些魔法可以避免这些缺点,我全力以赴!

我不反对检查原始内存使用情况,但当然,对于在堆上分配的成员(如std::vector(来说,这并不重要,而且我不知道这样做的方法。

我已经阅读了很多关于测试private成员的文章(滥用friend,编译时有条件地声明protected/public(,但我希望有人可以为这种更受限制的情况提供更漂亮的解决方案,或者一种在没有间接和内联丢失的情况下进行依赖注入的方法。

一种简单、有效且高性能的方法是添加公共 const getter 函数,该函数返回/const 引用的副本,以访问您感兴趣的私有成员变量或其属性。

考虑std::vector本身。 它被设计为一种非常有效的元素访问类型(与动态分配的数组一样快(,但它有许多类似 getter 的功能,如empty()size()等。 我有 99.999% 的信心,其中一些不会被您的代码使用(例如get_allocator()(,但我敢打赌,您不会梦想以"性能"的名义滚动自己的向量类以删除它们。

请记住,单元测试是关于测试对象的接口,而不是它们使用特定的数据结构来实现其逻辑。 因此,我建议公开向量数据成员的关键属性,而不是向量本身。