Читать qdebug в тестовом примере?

В моем тестовом примере я хочу утверждать, что вывод qDebug () включает определенную строку. Например, так выглядит мой тест. Обратите внимание на вывод «Привязано к UDP-порту 34772» из qdebug. Могу ли я проверить, что подстрока 34772 существует в 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"

1

Решение

использование 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());
// ...
2

Другие решения


По вопросам рекламы [email protected]