2014-09-03 2 views
1

В моем тестовом примере я хочу утверждать, что вывод qDebug() содержит определенную строку. Например, вот как выглядит мой тест. Обратите внимание на вывод «Bound to UDP port 34772» из qdebug. Могу ли я проверить, что подстрока 34772 существует в qdebug из моей тестовой функции?Прочтите qdebug в тестовом примере?

********* Start testing of tst_NetSocket ********* 
Config: Using QTest library 4.8.6, Qt 4.8.6 
PASS : tst_NetSocket::initTestCase() 
QDEBUG : tst_NetSocket::testBindToPortDefaultToMinAvailable() Bound to UDP port 34772 
FAIL! : tst_NetSocket::testBindToPortDefaultToMinAvailable() 'socket->getCurrentPort() == port_should_be' returned FALSE.() 
    Loc: [test_net_socket.cpp(59)] 
PASS : tst_NetSocket::cleanupTestCase() 
Totals: 5 passed, 1 failed, 0 skipped 
********* Finished testing of tst_NetSocket ********* 

Вот мой тестовый файл. Я хочу добавить QVERIFY() заявление, в моей тестовой функции, которая проверяет выход QDebug для подстроки 34772.

#include <QObject> 
#include <QtTest/QtTest> 
#include <unistd.h> 
#include "net_socket.hpp" 

class tst_NetSocket: public QObject 
{ 
    Q_OBJECT 

private slots: 
    // .... 
    void testBindToPortDefaultToMinAvailable(); 
}; 

// ... other tests removed for example ... 

void tst_NetSocket::testBindToPortDefaultToMinAvailable() 
{ 
    NetSocket * socket = new NetSocket(); 

    int port_should_be = (32768 + (getuid() % 4096)*4); 
    if (socket->bindToPort()) { 
     QVERIFY(socket->getCurrentPort() == port_should_be); 
    } 
} 

QTEST_MAIN(tst_NetSocket) 
#include "test_net_socket.moc" 
+2

Проверьте 'qInstallMessageHandler'. – hyde

ответ

2

Использование QTest::ignoreMessage утверждать, что определенное сообщение добавляется в коде тестируемой:

// ... 
int port_should_be = (32768 + (getuid() % 4096)*4); 
QTest::ignoreMessage(QtDebugMsg, QString::fromLatin1("Bound to UDP port %1").arg(port_should_be).toUtf8().constData()); 
// ... 
Смежные вопросы