Qt测试命令行选项

Qt Test command line options

本文关键字:选项 命令行 测试命令 测试 Qt      更新时间:2023-10-16

我对Qt非常陌生,我正在验证Qt测试单元测试框架。我使用的是Qt 5.5。我可以使用Qt宏创建测试用例,并从Qt Creator运行它们,但在命令提示符下运行时遇到了问题。具体来说,我无法使用Qt Test提供的日志记录选项。

以下是我正在做的:

  1. 使用Qt Creator创建了一个Qt测试项目
  2. 使用Qt Creator构建项目
  3. 可执行文件在"project_directory/debug"文件夹中创建
  4. 从调试文件夹打开命令提示符
  5. 运行以下命令:

QtTestValidation5.exe–xml
QtTestValidation5.exe-o results.txt,txt

  1. 所有测试都已执行,但文件夹中未保存任何内容

我想以xml、csv和文本文件格式记录测试结果。有人能帮忙吗?

第一个选项应该以XML格式将测试结果输出到stdout。我刚刚用我自己的图书馆测试过,它很有效。虽然它输出了几个连接的XML文档,但这可能是因为我使用的是手动执行几个测试的非标准main(),所以显然每个测试都会生成一个XML文档。

第二个可能是错误的:它应该是-o results.txt,txt(没有空格)。和我一样有效,但只写最后一个测试。同样,这可能是因为我手动执行了几个测试,所以每个测试都覆盖了前一个,而我只看到最后一个。如果我想保存所有测试,我需要使用-xml-txt指定格式,然后将其重定向到stdout:

qztest.exe -xml > results.xml

这是可行的,但我仍然在一个文件中获得多个连接的文档。

-csv选项不起作用,但Qt文档再次表示

此模式仅适用于基准测试,因为它抑制正常通过/失败消息。

我没有基准。

至于为什么这些论点对我有效,以下是我的main():

int main(int argc, char **argv)
{
    QCoreApplication app(argc, argv);
    int err = 0;
    {
        TestQuaZip testQuaZip;
        err = qMax(err, QTest::qExec(&testQuaZip, app.arguments()));
    }
    {
        TestQuaZipFile testQuaZipFile;
        err = qMax(err, QTest::qExec(&testQuaZipFile, app.arguments()));
    }
    // And so on, and so on...
    if (err == 0) {
        qDebug("All tests executed successfully");
    } else {
        qWarning("There were errors in some of the tests above.");
    }
    return err;
}

看,我创建了一个QCoreApplication——这可能非常重要,然后我手动将参数传递给QText::qExec。既然你已经用Qt Creator创建了你的项目,你可能希望看看你的main()。也许Qt Creator没有正确初始化某些内容。请记住,要使参数工作,测试代码应该能够以某种方式实际访问这些参数!因此,您必须显式地传递它们,或者至少初始化应用程序,以便代码可以在内部执行类似QCoreApplication::instance()->arguments()的操作。