在测试用例中读取qdebug

Read qdebug within a test case?

本文关键字:qdebug 读取 测试用例      更新时间:2023-10-16

在我的测试用例中,我想断言qDebug()的输出包括某个字符串。例如,这就是我的测试结果。请注意qdebug的"绑定到UDP端口34772"输出。我可以从我的测试函数中测试子字符串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()语句,用于检查子字符串34772的qDebug输出。

#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"

使用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());
// ...