首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有x服务器的QtTest控制台应用程序

没有x服务器的QtTest控制台应用程序
EN

Stack Overflow用户
提问于 2014-01-01 20:35:23
回答 1查看 2K关注 0票数 2

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

在我的计算机上,它工作得很好,但是我在Travis上设置了持续的集成,我得到:

代码语言:javascript
复制
lib_testapp: cannot connect to X server 

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

.pro中有以下几行:

代码语言:javascript
复制
TEMPLATE = app
CONFIG  += console c++11
QT      += testlib

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

代码语言:javascript
复制
class WatermarkingTests: public QObject
{
    Q_OBJECT
private slots:
void initTestCase() { }
void test1() { someTest(); }
void cleanupTestCase() { }
};

QTEST_MAIN(WatermarkingTests)
#include "main.moc"

someTest()是一个纯粹的数学函数,它调用QVERIFY。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-01 21:03:02

您的问题是以下几行:

代码语言:javascript
复制
QTEST_MAIN(WatermarkingTests)

从文件中:

QTEST_MAIN ( TestClass ) 实现一个main()函数,该函数实例化应用程序对象和TestClass,并按照定义的顺序执行所有测试。使用此宏生成独立的可执行文件。 如果定义了QT_GUI_LIB,应用程序对象将是一个QApplication,否则它将是一个QCoreApplication。如果使用qmake,并且配置包括QT,那么+=将自动定义。

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

代码语言:javascript
复制
QT = core testlib

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

MAIN( TestClass) 实现一个main()函数,该函数实例化QCoreApplication对象和TestClass,并按照定义的顺序执行所有测试。使用此宏生成独立的可执行文件。 行为类似于QTEST_MAIN(),但是实例化了一个QCoreApplication而不是QApplication对象。如果您的测试用例不需要QApplication提供的功能,但仍然需要事件循环,请使用此宏。 这一功能是在QT5.0中引入的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20872982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档