Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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++ 注入模拟的QTimer_C++_Qt_Unit Testing_Qtestlib - Fatal编程技术网

C++ 注入模拟的QTimer

C++ 注入模拟的QTimer,c++,qt,unit-testing,qtestlib,C++,Qt,Unit Testing,Qtestlib,我正在使用QTest为遗留代码编写一个单元测试,如: #include <QTimer> class MyObject: public QObject{ public: void foo(){ t1.start(500); } private: QTimer t1{this}; }; 它与QMetaObject magie一起实际工作 有没有更简单的方法?一些编译时包括注入?因此,MyObjec

我正在使用QTest为遗留代码编写一个单元测试,如:

#include <QTimer>
class MyObject: public QObject{
    public:
        void foo(){
            t1.start(500);
        }
    private:
        QTimer t1{this};
};
它与QMetaObject magie一起实际工作


有没有更简单的方法?一些编译时包括注入?因此,MyObject.h的
#include
使用模拟文件,其余的意大利面保持不变?

您还可以创建自己的抽象
类MyTimer
,方法类似于
开始
停止
设置回调
,并在生产中使用与
QTimer
组合,和模拟测试。然而,它实际上并没有那么复杂。@pptaszni请提供一个代码示例。我一直在用谷歌搜索这个问题,但在任何地方都没有找到合适的答案。如果您创建了一个抽象类,并让使用计时器的类采用该类型,那么必须从中派生QTimer。如果创建其他类并使用composition,您仍然需要向构造函数提供一些参数以获取Mock和QTimer,并将您正在测试的类的问题转移到另一个类。您还可以使用类似于
start
stop
的方法创建自己的抽象
类MyTimer
setCallback
并在生产中使用与
QTimer
组合,在测试中使用mock。然而,它实际上并没有那么复杂。@pptaszni请提供一个代码示例。我一直在用谷歌搜索这个问题,但在任何地方都没有找到合适的答案。如果您创建了一个抽象类,并让使用计时器的类采用该类型,那么必须从中派生QTimer。如果创建其他类并使用组合,则仍然需要向构造函数提供一些参数以获取Mock和QTimer,并将要测试的类的问题转移到另一个类。
class QTimer : public QObject
{
signals: 
    void onStarted(int);
public slots:
    void start(int i)
    {
        emit onStarted(i);
    }
};