我对我的项目进行了一些单元测试,这是我使用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。谢谢!
发布于 2014-01-01 21:03:02
您的问题是以下几行:
QTEST_MAIN(WatermarkingTests)从文件中:
QTEST_MAIN ( TestClass ) 实现一个main()函数,该函数实例化应用程序对象和TestClass,并按照定义的顺序执行所有测试。使用此宏生成独立的可执行文件。 如果定义了QT_GUI_LIB,应用程序对象将是一个QApplication,否则它将是一个QCoreApplication。如果使用qmake,并且配置包括QT,那么+=将自动定义。
这意味着,您将得到一个QApplication而不是QCoreApplication,因为默认情况下,QT变量包含core和gui。您需要使用以下语句来绕过它:
QT = core testlib注意,使用Qt 5,您可以只使用以下宏:
MAIN( TestClass) 实现一个main()函数,该函数实例化QCoreApplication对象和TestClass,并按照定义的顺序执行所有测试。使用此宏生成独立的可执行文件。 行为类似于QTEST_MAIN(),但是实例化了一个QCoreApplication而不是QApplication对象。如果您的测试用例不需要QApplication提供的功能,但仍然需要事件循环,请使用此宏。 这一功能是在QT5.0中引入的。
https://stackoverflow.com/questions/20872982
复制相似问题