在开发单元测试时,访问私有成员以检查类的内部状态可能是必要的.有时getter和setter函数不可用,有时它们不公开.
处理它的第一种方法是,编写预处理器定义写入publis而不是private和protected.
#define protected public
#define private public
Run Code Online (Sandbox Code Playgroud)
第二种方法是让测试类成为类的朋友.
class test_foo {
};
class foo {
private:
int mem;
friend class test_foo;
};
Run Code Online (Sandbox Code Playgroud)
第三种方法是为测试创建公共接口.
class foo {
#if defined FOO_UNIT_TEST
public:
int get_mem() const;
#endif
private:
int mem;
};
Run Code Online (Sandbox Code Playgroud)
除了这些方法之外还有其他方法吗?每种方法都有利有弊.哪一个可以被认为是最佳实践?
谢谢.
在我看来,这三种解决方案都很难看.我想说最好的做法是不在单元测试中检查你的类的内部状态,而不是仅仅为单元测试公开方法.这样做违背了TDD的原则.
良好的单元测试不会对内部状态做出任何假设,如果类实现完全改变,则无需修改即可运行.
为什么检查内部状态是必要的?也许你的设计问题可以通过重新设计而不是黑客来解决.你有一个更全面的例子来说明你想要实现的目标吗?
| 归档时间: |
|
| 查看次数: |
2425 次 |
| 最近记录: |