我在使用 UnitTest++ 编写单元测试时遇到了麻烦。 .我想知道如何以干净的方式(或者任何方式......)访问 私有(private)成员类字段
现在,我有了一个解决方案,可以使用派生自被测类的类固定装置访问 protected 成员。下面的代码展示了这个想法:
struct MyFixture : ClassUnderTest { };
TEST_FIXTURE(MyFixture, OneTest)
{
do_something();
CHECK(protected_field == true);
}
不过,我认为这不是很干净,因为在某些配置中可能会出现与继承相关的问题,而且无论如何,只能访问和测试 protected 成员。
我试图将测试类声明为 friends,但由于这些是由 UnitTest++ 以某种特殊方式创建的,所以我还没有设法做到。
有没有人知道如何让测试类成为被测类的 friend ?
有没有其他方法可以更简单或不同的方式解决这个问题?
提前谢谢大家。
最佳答案
有一个真的丑陋但非常有用的 hack,我通常用于单元测试:
#define private public
#define protected public
#include "class_to_be_tested.h"
// and here, all class's methods and fields are public :P
不要将它用于单元测试以外的任何事情!
此外,这种方法也有一些限制——首先,并非所有私有(private)内容都以 private
为前缀。其次,一种流行的编译器将访问说明符修改为链接器符号。
另一种也不是很好的方法是通过强制转换。您创建一个具有相同字段但都是公共(public)的结构,并将其强制转换为指向您的私有(private)结构的指针。然而,这有一个缺点,即类需要完全匹配:
class my_class
{
private:
char name[40];
char grade;
int age;
public:
//
}
struct my_class_hack
{
public:
char name[40];
char grade;
int age;
}
struct hack_it* my_class_hacked = (my_class_hack*)ptr;
...但是,如果编译器对您的代码进行处理,您可能会得到令人讨厌的惊喜,因此切勿将其用于生产代码。
关于c++ - 如何使用 UnitTest++ 从测试中访问私有(private)类字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2085501/