c++单元测试:改变成员范围

C++ Unit testing: Changing member scope

本文关键字:成员 范围 改变 单元测试 c++      更新时间:2023-10-16

我正在为我的类编写单元测试,并且想要练习私有方法。我正在做这样的事情:

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;关键字。