C++泥瓦匠 2023-01-13 18:39 采纳率: 0%
浏览 19

如何测试类的私有成员函数

问题遇到的现象和发生背景

如何测试类的私有成员函数

遇到的现象和发生背景,请写出第一个错误信息

如何测试类的私有成员函数

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%

base.h的内容

class Base
{
public:
    virtual void run(void) = 0;

    static Base& instance(void);
};

a.cpp的内容
#include "base.h"
class A : public Base
{
public:
    virtual void run(void)
    {
        std::cout << "A.run() called." << std::endl;
        f1();
        f2();
    }
private:
    void f1(void)
    {
    }

    void f2(void)
    {
    }
};

Base& Base::instance(void)
{
    static A sa;
    return sa;
}

现在,我如何测试A.f1, A.f2 ?

运行结果及详细报错内容

如何测试A.f1, A.f2 ?

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

把f1,f2定义成A的Public方法,且增加头文件a.h

class A : public Base
{
public:
    virtual void run(void);
    void f1(void);
    void f2(void);
};

然后在a.cpp中写实现,但这样原本封装在A的实现中的f1,f2暴露了。

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
  • 写回答

3条回答 默认 最新

  • 流比 2023-01-13 18:47
    关注

    如果需要测试类中的私有成员函数,一种常用的方法是使用友元类或友元函数,在测试类中通过友元关系访问私有成员。
    另外一种方法是使用私有继承。在测试类中继承需要测试的类,由于继承是类型转换关系,所以测试类可以访问父类的私有成员。

    代码示例如下:

    class A;
    class TestA
    {
    public:
    void testF1(A& a);
    };
    
    class A : public Base
    {
    friend class TestA;
    private:
    void f1(void);
    void f2(void);
    };
    
    void TestA::testF1(A& a)
    {
    a.f1();
    }
    
    class TestA
    {
    public:
    void testF1(A& a);
    };
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 1月13日

悬赏问题

  • ¥15 WPF 大屏看板表格背景图片设置
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示