1

I use googletest as the main testing framework for a Qt project. QAbstractItemModelTester helps catching the most common errors in custom item model classes but I don't know how to integrate the reported failures(QTest) in a googletest unit test.

adrian
  • 31
  • 2

1 Answers1

1

I didn't find any direct way to do this, but this is what I've done to have assertion for testing errors in QAbstractItemModelTester:

class AssertNoQtLogWarnings
{
    static void messageHandlerTest(QtMsgType type, const QMessageLogContext& context, const QString& msg)
    {
        static bool NO_WARNING_MSG = true;
        QByteArray localMsg = msg.toLocal8Bit();
        const char* file = context.file ? context.file : "";
        const char* function = context.function ? context.function : "";
        switch (type) {
        case QtDebugMsg:
            fprintf(stderr, "Debug: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
            break;
        case QtInfoMsg:
            fprintf(stderr, "Info: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
            break;
        case QtWarningMsg:
            EXPECT_EQ(false, NO_WARNING_MSG) << msg.toStdString();
            break;
        case QtCriticalMsg:
            EXPECT_EQ(false, NO_WARNING_MSG) << msg.toStdString();
            break;
        case QtFatalMsg:
            EXPECT_EQ(false, NO_WARNING_MSG) << msg.toStdString();
            break;
        }
    }
public:
    AssertNoQtLogWarnings()
    {
        qInstallMessageHandler(messageHandlerTest);
    }

    ~AssertNoQtLogWarnings()
    {
        //Install default message handler
        qInstallMessageHandler(nullptr);
    }
};

TEST(QAbstractItemModel, QAbstractItemModel)
{
    //RAII object. Any warning, critical or fatal message produced in this context
    //will produce a GTest fail assertion
    AssertNoQtLogWarnings logQtTest; 

    MyAbstractItemModel model;
    QAbstractItemModelTester tester(&model, QAbstractItemModelTester::FailureReportingMode::Warning);
    
}
iota
  • 29
  • 1
  • 5
javijg
  • 11
  • 1
  • Can u show main how did u configure test in 1st place? Im getting no print/errors :/ I doubt my abstract model is perfect! – Dariusz May 04 '23 at 17:00