我正在向 Qt 中的项目添加单元测试,并希望使用 QTestLib。我已经设置了测试,它们运行良好。
问题是在项目中我们覆盖了 qDebug() 以输出到我们自己的日志文件。这在运行应用程序时效果很好,问题是当我测试类时,它有时会开始记录,然后发送到输出窗口。结果是一场彻底的灾难,几乎无法阅读,因为我们的日志与 QTest 输出混合在一起。
我想知道是否有办法抑制 qDebug() 输出,或者至少将它移到其他地方。我尝试添加 #define QT_NO_DEBUG_OUTPUT
并使用 qInstallMsgHandler(messageOutput);
来重定向或阻止输出,但都没有任何效果。
最佳答案
@Kuba 给出的解决方案在某些情况下有效,但在 main 方法中与 QTest::qExec(&test,argc,argv)
结合使用以运行大量测试时无效。在那种情况下,禁用 qDebug() 输出(我发现的)的唯一方法是让每个测试类在它们的 void initTestCase()
槽中注册一个新的消息处理程序。
例如
void noMessageOutput(QtMsgType, const char *)
{}
int main(int argc,char* argv[])
{
qInstallMsgHandler(noMessageOutput);
tst_Class1 t1;
tst_Class2 t2;
QTest::qExec(&t1,argc,argv);
QTest::qExec(&t2,argc,argv);
}
将显示调试输出 tst_Class1、Class1、tst_Class2 和 Class2。为防止这种情况,您必须明确禁用每个测试类中的输出
class tst_Class1
{
//class stuff
private slots:
void initTestCase();
//test cases
};
void tst_Class1::initTestCase()
{
qInstallMsgHandler(noMessageOutput);
}
class tst_Class2
{
//class stuff
private slots:
void initTestCase();
//test cases
};
void tst_Class2::initTestCase()
{
qInstallMsgHandler(noMessageOutput);
}
如果您希望查看类子集的调试输出,请删除 qInstallMsgHandler()
行,它将通过。
关于c++ - 使用 QTestLib 时抑制 qDebug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11058456/