TD中的TDD.如何测试私有类的朋友功能?
如果我有一个带有帮助器(私有成员)类的类,就像这样
class Obj; class Helper { friend class Obj; private: int m_count; Helper(){ m_count = 0;}; // Note this is a private constructor void incrementCount(){ ++m_count; }; }; class Obj { Helper *m_pHelper; // note that this is a private getter int getHelperCount() { return m_pHelper->m_count; }; // the public API starts here public: Obj() { m_pHelper = new Helper(); }; void incrementCount(){ m_pHelper->incrementCount(); }; }; 那么我怎么可能TDD这样的系统呢? auto obj = new Obj(); obj->incrementCount(); // what to assert??? 这是我的问题,以下只是一些背景知识. 回答一些答案和评论.
即使外面没有人需要该值,我仍然可能想知道如果它设置正确,因为它被使用该值的类的其他自包含内部方法使用.也许值是控制器用它来更新模型的速度.或者它可能是视图将用它在屏幕上绘制内容的位置.事实上,Obj的所有其他组件都能够访问该变量.这可能是一个糟糕的设计问题,在这种情况下,我想知道我可以有更好的替代方案.该设计列在本文底部的背景部分.
喜欢这种巧妙滥用关键词哈哈.但可能还没有被认为是最好的解决方案.
这是否意味着我应该在我原来的课堂上为考试做好准备?或者为它添加额外的“测试”方法? 其他:AFAIK TDD不只是编写测试,而是开发过程.我已经读过,我应该只对公共接口编写测试.但问题是,与所讨论的情况一样,大多数代码都包含在私人类中.我如何使用TDD创建这些代码? 背景 仅供参考,如果您想知道我为什么要上私人课程: 提前致谢. 解决方法
#define私有公共技巧可以通过某些编译器修改函数符号的方式产生副作用(Visual c编译器在其名称中包含访问说明符)
您还可以使用using语句更改可见性: struct ObjTest : public Obj { using Obj::incrementCount; } 但就像其他人说的那样,尽量不要测试私人物品. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |