我有一个 deactivate()
方法,除其他外,它应该释放类的一个私有(private)成员(最终是一个 std::vector
的 resize(0)
+ shrink_to_fit()
- 但这并不重要)。
如果测试无法访问私有(private)成员以对其进行检查,我该如何进行单元测试以确认该成员已被 deactivate
方法释放?
我正在努力避免依赖注入(inject),因为代码对性能至关重要,而且我对通过引用/指针的间接访问和内联优化的潜在损失持谨慎态度。但如果有一些魔法可以避免这些缺点,我完全赞成!
我不反对检查原始内存使用情况,但当然这对于在堆上分配的成员(如 std::vector
)来说并非易事,而且我不知道有什么办法去做。
我已经阅读了很多关于测试 private
成员的帖子(滥用 friend
,编译时有条件地声明 protected
/public
),但我希望有人可以为这种更受限制的情况提供更漂亮的解决方案,或者提供一种无需间接和内联丢失的依赖注入(inject)方法。
最佳答案
一种简单、有效和高效的方法是添加公共(public) const getter 函数,这些函数返回对私有(private)成员变量或其属性的/const 引用的拷贝。
考虑 std::vector
本身。它被设计成一种非常高效的元素访问类型(与动态分配的数组一样快),但它有许多类似 getter 的函数,例如 empty()
、size()
等。我有 99.999% 的信心,其中一些不会被您的代码使用(例如 get_allocator()
),但我敢打赌您不会梦想只是滚动自己的 vector 类以“性能”的名义删除它们。
请记住,单元测试是关于测试对象的接口(interface),而不是它们使用特定的数据结构来实现它们的逻辑。因此,我建议公开 vector 数据成员的关键属性而不是 vector 本身。
关于私有(private)成员的 C++14 单元测试(解除)分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45537512/