Vin*_*oth 7 c++ oop qt unit-testing
我的代码是
class ExampleTest : public QObject
{
Q_OBJECT
public:
ExampleTest() {}
private Q_SLOTS:
void DoAllExampleTests();
};
void ExampleTest::DoAllExampleTests()
{
QProcess p;
p.start( "cmd /c wmic path Win32_usbcontrollerdevice|grep VID_1004" );
qDebug() << "Here 1";
QVERIFY( TRUE == p.waitForFinished() );
qDebug() << "Here 2";
}
QTEST_APPLESS_MAIN(ExampleTest);
Run Code Online (Sandbox Code Playgroud)
我在Here 1和Here 2之间获得了一个qwarn
QObject::startTimer: Timers can only be used with threads started with QThread
Run Code Online (Sandbox Code Playgroud)
我从QObject :: startTimer学到了:Timers只能用于用QThread启动的线程,当我将Qt类子类化并且子类的一个成员不是Qt层次结构的一部分时.我有从QObject继承的类ExampleTest,但我仍然收到警告.如何避免这种警告?
MrE*_*Sir 12
警告可以使用更好的措辞 - 这不是QThread问题,它是一个事件循环问题.QThread自动为你设置一个,但在这里你只有一个主线程.
有两种方法可以在主线程中创建事件循环:
大多数应用程序将使用选项2.但是,您正在编写单元测试.没有QApplication运行单元测试的原因是因为您指定了QTEST_APPLESS_MAIN.引用文档:
实现一个main()函数,该函数执行TestClass中的所有测试.
行为类似于QTEST_MAIN(),但不实例化QApplication对象.使用此宏进行非常简单的独立非GUI测试.
强调我的.
所以你需要做的就是改变最后一行:
QTEST_APPLESS_MAIN(ExampleTest);
Run Code Online (Sandbox Code Playgroud)
对此:
QTEST_MAIN(ExampleTest);
Run Code Online (Sandbox Code Playgroud)
......那应该解决这个问题.