Qt在没有x服务器的情况下测试控制台应用程序



我用QtTest框架为我的项目进行了一些单元测试。它是一个控制台应用程序,实际上除了QtTest之外,我没有使用任何来自Qt的东西。

在我的电脑上,它运行良好,但我正在Travis上设置持续集成,我得到:

lib_testapp: cannot connect to X server 

我试着用-platform offscreen运行我的应用程序,就像我在另一个线程上看到的那样,但它似乎没有改变任何东西。

在.pro:中有这些行

TEMPLATE = app
CONFIG  += console c++11
QT      += testlib

我的main.cpp看起来像这样:

class WatermarkingTests: public QObject
{
Q_OBJECT
private slots:
void initTestCase() { }
void test1() { someTest(); }
void cleanupTestCase() { }
};
QTEST_MAIN(WatermarkingTests)
#include "main.moc"

someTest()是一个纯数学函数,它对QVERIFY进行一些调用。谢谢

您的问题是以下行:

QTEST_MAIN(WatermarkingTests)

来自文件:

QTEST_MAIN(测试类)

实现一个main()函数,该函数实例化应用程序对象和TestClass,并按定义的顺序执行所有测试。使用此宏可以生成独立的可执行文件。

如果定义了QT_GUI_LIB,则应用程序对象将是QApplication,否则将是QCoreApplication。如果使用qmake,并且配置包括QT+=gui,则QT_gui_LIB将自动定义。

这意味着您将获得一个QApplication而不是QCoreApplication,因为默认情况下QT变量包含core和gui。您需要使用以下语句来绕过它:

QT = core testlib

注意,使用Qt 5,您可以只使用以下宏:

QTEST_GUILESS_MAIN(测试类)

实现一个main()函数,该函数实例化QCoreApplication对象和TestClass,并按照定义的顺序执行所有测试。使用此宏可以生成独立的可执行文件。

行为类似于QTEST_MAIN(),但实例化的是QCoreApplication,而不是QApplication对象。如果您的测试用例不需要QApplication提供的功能,但事件循环仍然是必要的,请使用此宏。

此功能在Qt 5.0中引入。

最新更新