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