c++单元测试:改变成员范围
C++ Unit testing: Changing member scope
我正在为我的类编写单元测试,并且想要练习私有方法。我正在做这样的事情:
class MyClass {
Myclass() {}
~MyClass() {}
#ifdef TESTING
public:
#else
private:
#endif
void MyMethod1();
void MyMethod2();
};
如果定义了TESTING
,则更改类签名以使所有内容都公开。在我的测试代码中,我只是这样做:
#define TESTING
#include "MyClass.h"
void MyTestMethod()
{
MyClass mc;
mc.MyMethod1(); // Now I can access MyMethod1
}
所以它只在我的测试文件中公开,而不是在其他任何地方。我的测试可执行文件看到一个头文件,它描述了一个完全公有的类。类的代码实际上是在其他地方构建的(其中没有定义TESTING
),因此当测试项目链接到库时,范围将不同。
这有可能破坏任何东西吗?我担心这可能会改变变量表的位置或编译器和链接器的期望,如果头文件不同于实际产生的目标文件。
您可能会以低质量的测试结束。测试与类的实际功能无关的实现细节的测试。测试公共接口只会使您获得良好的设计和测试用例,这些设计和测试用例可以承受代码重构而不会中断。
丑陋,虽然这是可能的,但不要这样做,而是为您的测试创建一个包装类,并在MyClass中使用friend TestClass;
关键字。
相关文章:
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- 迭代嵌套映射与范围为循环:没有名为"first"的成员
- 检查私有成员变量是否在一定范围内,如果没有调整
- 立即传递其成员时的右值范围
- 成员变量在超出BeginPlay函数虚幻引擎的范围时丢失值c++
- 越界成员函数定义是否需要一个完全限定的类名,直到全局范围
- 对象超出范围后,引用成员设置为 0
- pImpl、范围和隐藏数据成员
- 在命名成员函数重载解析期间,"this"何时不在范围内?
- 当在另一个范围中,将SelfAdjointeigensolver保存为成员的结果被重新引入
- 成员的结构与命名空间的潜在范围
- C++奇怪的问题.数据成员超出范围
- 范围视图作为数据成员
- 基于循环的C ISTRINGSTREAM范围没有开始成员
- 为 具有"end"成员变量的类型启用基于范围的
- 如何将成员函数引入范围
- 如何基于每个成员覆盖类范围的__declspec(dllexport)注释?
- 从对象本身访问成员或成员范围
- c++单元测试:改变成员范围
- 在不更改成员范围的情况下有条件地启用静态成员