C++ 注入模拟的QTimer
我正在使用QTest为遗留代码编写一个单元测试,如: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
#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);
}
};