Dav*_*eer 3 qt unit-testing googletest
我的 Qt 应用程序使用 Q_ASSERT_X,它调用 qFatal(),它(默认情况下)中止应用程序。这对应用程序来说很棒,但我想在对应用程序进行单元测试时抑制这种行为。(我正在使用Google 测试框架。)我在一个单独的项目中进行了单元测试,静态链接到我正在测试的类。qFatal()的文档如下:
使用致命消息 msg 调用消息处理程序。如果尚未安装消息处理程序,则消息将打印到 stderr。在 Windows 下,消息被发送到调试器。
如果您使用默认消息处理程序,则此函数将在 Unix 系统上中止以创建核心转储。在 Windows 上,对于调试版本,此函数将报告 _CRT_ERROR,使您能够将调试器连接到应用程序。
...
要在运行时抑制输出,请使用 qInstallMsgHandler() 安装您自己的消息处理程序。
所以这是我的 main.cpp 文件:
#include <gtest/gtest.h>
#include <QApplication>
void testMessageOutput(QtMsgType type, const char *msg) {
switch (type) {
case QtDebugMsg:
fprintf(stderr, "Debug: %s\n", msg);
break;
case QtWarningMsg:
fprintf(stderr, "Warning: %s\n", msg);
break;
case QtCriticalMsg:
fprintf(stderr, "Critical: %s\n", msg);
break;
case QtFatalMsg:
fprintf(stderr, "My Fatal: %s\n", msg);
break;
}
}
int main(int argc, char **argv)
{
qInstallMsgHandler(testMessageOutput);
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
Run Code Online (Sandbox Code Playgroud)
但是我的应用程序仍然停留在断言处。我可以知道我的自定义处理程序正在被调用,因为运行我的测试时的输出是:
My Fatal: ASSERT failure in MyClass::doSomething: "doSomething()", file myclass.cpp, line 21 程序意外完成。
我该怎么做才能让我的测试在断言失败时继续运行?
| 归档时间: |
|
| 查看次数: |
5018 次 |
| 最近记录: |