Googletest 如何将QabstracteModelTester与google测试结合使用?

Googletest 如何将QabstracteModelTester与google测试结合使用?,googletest,qttest,Googletest,Qttest,我使用googletest作为Qt项目的主要测试框架。QabstracteModelTester有助于捕获自定义项模型类中最常见的错误,但我不知道如何在googletest单元测试中集成报告的失败(QTest)。我没有找到任何直接的方法来做到这一点,但这就是我在QabstracteModelTester中为测试错误所做的断言: class AssertNoQtLogWarnings { static void messageHandlerTest(QtMsgType type,

我使用googletest作为Qt项目的主要测试框架。QabstracteModelTester有助于捕获自定义项模型类中最常见的错误,但我不知道如何在googletest单元测试中集成报告的失败(QTest)。

我没有找到任何直接的方法来做到这一点,但这就是我在QabstracteModelTester中为测试错误所做的断言:

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);
    
}
类AssertNoQtLogWarnings
{
静态void messageHandlerTest(QtMsgType类型,常量QMessageLogContext&context,常量QString&msg)
{
静态布尔无警告消息=真;
QByteArray localMsg=msg.toLocal8Bit();
const char*file=context.file?context.file:;
const char*function=context.function?context.function:“”;
开关(类型){
案例QtDebugMsg:
fprintf(stderr,“调试:%s(%s:%u,%s)\n”、localMsg.constData()、文件、context.line、函数);
打破
案例QtInfoMsg:
fprintf(stderr,“信息:%s(%s:%u,%s)\n”、localMsg.constData()、文件、context.line、函数);
打破
案例QtWarningMsg:

EXPECT_EQ(false,NO_WARNING_MSG)我没有找到任何直接的方法来实现这一点,但这就是我在QabstracteModelTester中为测试错误所做的断言:

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);
    
}
类AssertNoQtLogWarnings
{
静态void messageHandlerTest(QtMsgType类型,常量QMessageLogContext&context,常量QString&msg)
{
静态布尔无警告消息=真;
QByteArray localMsg=msg.toLocal8Bit();
const char*file=context.file?context.file:;
const char*function=context.function?context.function:“”;
开关(类型){
案例QtDebugMsg:
fprintf(stderr,“调试:%s(%s:%u,%s)\n”、localMsg.constData()、文件、context.line、函数);
打破
案例QtInfoMsg:
fprintf(stderr,“信息:%s(%s:%u,%s)\n”、localMsg.constData()、文件、context.line、函数);
打破
案例QtWarningMsg:
EXPECT\u EQ(错误,无警告消息)