Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 可以从测试类QT调用私有函数吗_C++_Qt_Testing - Fatal编程技术网

C++ 可以从测试类QT调用私有函数吗

C++ 可以从测试类QT调用私有函数吗,c++,qt,testing,C++,Qt,Testing,我正在为我的QT项目实现一个测试类。我已经为所有公共函数添加了测试,但是我想在测试中包括一些私有函数 显然,这不起作用,因为它们是私有成员函数,但我想知道这是否可以绕过,因为我想从测试用例访问它们,我不特别想更改代码,以便我的测试工作,因为这不是真的有帮助,我希望函数是私有的,但我也希望能够测试它们 只是想知道是否有人知道这是否可行,或者我是否需要将我的函数更改为protected或其他,然后为我的测试继承类?选项一。您的功能可能是有条件的公共-私有 #ifdef UNIT_TEST #defi

我正在为我的QT项目实现一个测试类。我已经为所有公共函数添加了测试,但是我想在测试中包括一些私有函数

显然,这不起作用,因为它们是私有成员函数,但我想知道这是否可以绕过,因为我想从测试用例访问它们,我不特别想更改代码,以便我的测试工作,因为这不是真的有帮助,我希望函数是私有的,但我也希望能够测试它们


只是想知道是否有人知道这是否可行,或者我是否需要将我的函数更改为protected或其他,然后为我的测试继承类?

选项一。您的功能可能是有条件的公共-私有

#ifdef UNIT_TEST
#define ut public
#else
#define ut private

class Testee
{
    public:
    ....


    ut:
    //private functions to be tested


    ptivate:
};
然后,在测试头中,简单地

#define UNIT_TEST
#include <Testee.h>

通常只对公共函数进行单元测试,但是可以将测试类作为原始类的朋友。诸如此类:

friend的Declaration应该位于
#define UNIT_TEST
标志内

#include <iostream>

class ToTestClass 
{
 #ifdef UNIT_TEST
    // ToTestClass declares TesterClass as a friend.
    friend class TesterClass;
 #endif

private:
    void privateMethod()
    {
        std::cout << "hey there" << std::endl;
    }
};

class TesterClass
{
public:
    TesterClass()
    {
        ToTestClass  totest;
        // TesterClass now has access to ToTestClass's private members and methods.
        totest.privateMethod();
    }
};

int main()
{
    TesterClass tester;
    return 0;
}
#包括
阶级
{
#ifdef单元测试
//ToTestClass将TesterClass声明为好友。
好友类测试类;
#恩迪夫
私人:
void privateMethod()
{

std::cout您可能想提到的另一个问题是,交换这些访问修饰符有很好的机会更改类的内存布局。毕竟,标准保证使用相同访问修饰符的成员在内存中的出现顺序与其声明的相对顺序相同。因此,在包含私有函数的类中s我想测试,作为一个私有成员,我添加了
朋友类测试;
,因为我刚刚尝试了这个,它仍然说无法访问私有成员variable@AngryDuck:无论您在哪里添加
好友类TesterClass;
-公共或私人区域,都无关紧要。添加后,TesterClass的所有功能都将访问私人区域Testee的成员们。对不起,我不明白“定义位”你能更新你的代码吗,因为现在我把friend作为一个类有很多错误,应该是
friend class testerClass
或者:在单元测试头中,
定义单元测试仪(x)friend class x;/*或者,取决于构建*/#定义单元测试仪(x)
在课堂上,只有一行
单元测试仪(TesterClass)
#include <iostream>

class ToTestClass 
{
 #ifdef UNIT_TEST
    // ToTestClass declares TesterClass as a friend.
    friend class TesterClass;
 #endif

private:
    void privateMethod()
    {
        std::cout << "hey there" << std::endl;
    }
};

class TesterClass
{
public:
    TesterClass()
    {
        ToTestClass  totest;
        // TesterClass now has access to ToTestClass's private members and methods.
        totest.privateMethod();
    }
};

int main()
{
    TesterClass tester;
    return 0;
}