gpt4 book ai didi

私有(private)成员的 C++14 单元测试(解除)分配

转载 作者:行者123 更新时间:2023-11-28 01:44:58 25 4
gpt4 key购买 nike

我有一个 deactivate() 方法,除其他外,它应该释放类的一个私有(private)成员(最终是一个 std::vectorresize(0) + shr​​ink_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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com