使用 qExec 创建 Qt 测试套件
Using qExec to create Qt Test suite
QTest
鼓励您将单元测试组织为单独的可执行文件。为此有一个特殊的宏,它生成主函数:QTEST_MAIN
.
我发现这种方法不是很干净,运行一次所有测试更有用。所以我搜索了是否有这样做的可能性,我发现有几个人提出了相同的解决方案:
Qt: run unit tests from multiple test classes and summarize the output from all of them
http://www.davideling.it/2014/01/qtest-multiple-unit-test-classes/
https://alexhuszagh.github.io/2016/using-qttest-effectively/
解决方案是放弃使用 QTEST_MAIN
宏并编写自己的 main
函数,在其中执行要执行的测试:
int main(int argc, char *argv[])
{
int status = 0;
{
TestA ta;
status |= QTest::qExec(&ta, argc, argv);
}
{
TestB tb;
status |= QTest::qExec(&tb, argc, argv);
}
return status;
}
我发现这是个好主意,但是,有一个问题。 Qt's documentation for qExec
有一部分听起来像这样:
For stand-alone test applications, this function should not be called
more than once, as command-line options for logging test output to
files and executing individual test functions will not behave
correctly.
那些人透露的解决方案只是建议:执行 qExec
不止一次。谁能给我解释一下 command-line options for logging test output to files and executing individual test functions will not behave correctly
到底是什么意思?
这种方法到底有什么问题?
文档可能在谈论 Logging Options。如果您调用 qMain
两次并将 -o
选项传递给两次调用,则第二次调用可能会覆盖第一次调用的日志文件。如果您知道这永远不会发生,您可能会选择忽略该警告。您也可以不将命令行参数传递给 qExec,这样您将强制输出到标准输出,但是您当然失去了传递其他参数的能力。
如果你想运行来自Qt Creator的测试用例,你也不应该调用qExec超过一次。每个测试 class 都会出现在测试列表中,但是 运行ning 一个只会 运行 全部,所以你会得到每个 class 显示的结果 class.如果你 运行 所有测试(默认),你会得到结果的平方数。
因此,如果您不喜欢多重可执行方法,只需使用 Google 测试。上面有none个问题,造物主提供支持。设置非常简单:当您创建自动测试项目时,向导会指导您。您唯一需要做的就是下载 Google 测试版。
Google 测试用例将显示在测试视图中 Qt 测试用例的旁边。
QTest
鼓励您将单元测试组织为单独的可执行文件。为此有一个特殊的宏,它生成主函数:QTEST_MAIN
.
我发现这种方法不是很干净,运行一次所有测试更有用。所以我搜索了是否有这样做的可能性,我发现有几个人提出了相同的解决方案:
Qt: run unit tests from multiple test classes and summarize the output from all of them
http://www.davideling.it/2014/01/qtest-multiple-unit-test-classes/
https://alexhuszagh.github.io/2016/using-qttest-effectively/
解决方案是放弃使用 QTEST_MAIN
宏并编写自己的 main
函数,在其中执行要执行的测试:
int main(int argc, char *argv[])
{
int status = 0;
{
TestA ta;
status |= QTest::qExec(&ta, argc, argv);
}
{
TestB tb;
status |= QTest::qExec(&tb, argc, argv);
}
return status;
}
我发现这是个好主意,但是,有一个问题。 Qt's documentation for qExec
有一部分听起来像这样:
For stand-alone test applications, this function should not be called more than once, as command-line options for logging test output to files and executing individual test functions will not behave correctly.
那些人透露的解决方案只是建议:执行 qExec
不止一次。谁能给我解释一下 command-line options for logging test output to files and executing individual test functions will not behave correctly
到底是什么意思?
这种方法到底有什么问题?
文档可能在谈论 Logging Options。如果您调用 qMain
两次并将 -o
选项传递给两次调用,则第二次调用可能会覆盖第一次调用的日志文件。如果您知道这永远不会发生,您可能会选择忽略该警告。您也可以不将命令行参数传递给 qExec,这样您将强制输出到标准输出,但是您当然失去了传递其他参数的能力。
如果你想运行来自Qt Creator的测试用例,你也不应该调用qExec超过一次。每个测试 class 都会出现在测试列表中,但是 运行ning 一个只会 运行 全部,所以你会得到每个 class 显示的结果 class.如果你 运行 所有测试(默认),你会得到结果的平方数。
因此,如果您不喜欢多重可执行方法,只需使用 Google 测试。上面有none个问题,造物主提供支持。设置非常简单:当您创建自动测试项目时,向导会指导您。您唯一需要做的就是下载 Google 测试版。 Google 测试用例将显示在测试视图中 Qt 测试用例的旁边。