我用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中引入。