是否可以从测试类QT调用私有函数

时间:2013-04-29 10:00:17

标签: c++ qt testing

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

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

只是想知道是否有人对这是否可能有任何想法,或者我是否需要将我的功能更改为受保护的东西,然后继承我的测试类?

2 个答案:

答案 0 :(得分:2)

通常的做法是只对单元测试公共函数进行单元测试,但您可以将测试类作为原始类的朋友。这样的事情:

朋友的诽谤应该在#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;
}

答案 1 :(得分:1)

选项一。您的职能可能是有条件的公共私人

#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>

如果测试和应用程序在同一个项目(程序)中,这有点危险,因为根据标准,类定义在同一程序中的所有翻译单元中必须相同,否则,未定义的行为。

其次,更容易和更安全的选择是将Tester类声明为朋友。

class Testee
{
    public:
    ....

    ptivate:
    ....
    friend class Tester;
};