C++14 对私有成员进行单元测试(取消)分配
C++14 unit testing (de)allocation of a private member
我有一个deactivate()
方法,除其他事项外,它应该释放类的私有成员(最终是std::vector
的resize(0)
+shrink_to_fit()
- 但这并不重要(。
鉴于测试无法访问私有成员进行检查,我如何进行单元测试,该测试是否通过deactivate
方法解除了成员的分配?
我试图避免依赖注入,因为代码对性能至关重要,并且我对通过引用/指针的间接和内联优化的潜在损失持谨慎态度。 但是,如果有一些魔法可以避免这些缺点,我全力以赴!
我不反对检查原始内存使用情况,但当然,对于在堆上分配的成员(如std::vector
(来说,这并不重要,而且我不知道这样做的方法。
我已经阅读了很多关于测试private
成员的文章(滥用friend
,编译时有条件地声明protected
/public
(,但我希望有人可以为这种更受限制的情况提供更漂亮的解决方案,或者一种在没有间接和内联丢失的情况下进行依赖注入的方法。
一种简单、有效且高性能的方法是添加公共 const getter 函数,该函数返回/const 引用的副本,以访问您感兴趣的私有成员变量或其属性。
考虑std::vector
本身。 它被设计为一种非常有效的元素访问类型(与动态分配的数组一样快(,但它有许多类似 getter 的功能,如empty()
、size()
等。 我有 99.999% 的信心,其中一些不会被您的代码使用(例如get_allocator()
(,但我敢打赌,您不会梦想以"性能"的名义滚动自己的向量类以删除它们。
请记住,单元测试是关于测试对象的接口,而不是它们使用特定的数据结构来实现其逻辑。 因此,我建议公开向量数据成员的关键属性,而不是向量本身。
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- VC++本机单元测试,找不到调试符号
- 用于交叉编译和CMake的预处理器宏的单元测试
- C++ 用于单元测试的模板模板
- 提升 1.64 单元测试编译失败
- 单元测试欧拉到四元数实现失败
- 运行 C++ 单元测试时LNK2005链接错误
- 禁用自动捕获 Googletest 单元测试中的C++异常
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- 使用 Google Test 对自定义断言函数进行单元测试
- 如何将我的 CMake 项目配置为运行所有单元测试?
- 在Qt C++单元测试中动态加载QQuickWindow而不是QQuickWidget
- MS 本机单元测试 - 断言::线程失败不起作用
- 如何获取 CMake 单元测试的相对路径?
- QTimer 超时不会在单元测试中触发
- 如何在提升构建中设置环境变量以进行提升单元测试框架?
- C++14 对私有成员进行单元测试(取消)分配
- 使用 Netbeans 进行单元测试 - 取消缓冲.dll没有这样的文件或目录
- 单元测试 - 是否可以在C++(Visual Studio)中取消定义类