Qt 自带QTest
,还有一些文档:例如,官方教程 http://doc.qt.io/qt-5/qttestlib-tutorial1-example.html.
然而,QTest
鼓励您将单元测试组织为单独的可执行文件。为此有一个特殊的宏,它生成main()
: QTEST_MAIN()
老实说,我真的不喜欢这种方法:通常,一次运行所有测试会更有用,以确保最近的更改不会破坏任何内容。有时,屏蔽某些测试或执行某些单独的测试很有用,但这是一个例外,而不是规则。
所以,我想立即运行所有测试。好的,我可以自己写main()
执行我想要的所有测试,例如:
int main(int argc, char **argv)
{
int status = 0;
//-- run all tests
{
TestHTCodecISO14230 tc;
status |= QTest::qExec(&tc, argc, argv);
}
{
TestHTDataMsg tc;
status |= QTest::qExec(&tc, argc, argv);
}
return status;
}
它确实运行了所有测试,但问题是我没有所有测试的方便摘要。比如说,对于上面的两个测试,我有两个单独的总结:
********* Start testing of TestHTCodecISO14230 *********
Config: Using QtTest library 5.4.1, Qt 5.4.1 (i386-little_endian-ilp32 shared (dynamic) release build; by GCC 4.6.1)
PASS : TestHTCodecISO14230::initTestCase()
PASS : TestHTCodecISO14230::decode_summary()
PASS : TestHTCodecISO14230::encode()
PASS : TestHTCodecISO14230::decode_encoded()
PASS : TestHTCodecISO14230::cleanupTestCase()
Totals: 5 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of TestHTCodecISO14230 *********
********* Start testing of TestHTDataMsg *********
Config: Using QtTest library 5.4.1, Qt 5.4.1 (i386-little_endian-ilp32 shared (dynamic) release build; by GCC 4.6.1)
PASS : TestHTDataMsg::initTestCase()
PASS : TestHTDataMsg::test1()
PASS : TestHTDataMsg::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of TestHTDataMsg *********
返回的事实status
如果出现错误,将非零肯定有帮助,但如果我也有摘要,则会更有帮助:
Totals: 8 passed, 0 failed, 0 skipped, 0 blacklisted
从我看来,这是不可能的:我找不到以编程方式获取通过、失败、跳过和黑名单测试数量的方法:qExec()
只是一个函数QTest
命名空间,因此,在执行后不可能收集一些额外的信息。
好吧,可以解析输出字符串,但是,呃......
对我来说,这看起来是糟糕的设计。这样做可能会好得多QTest
作为一个类,然后创建它的实例并向其提供一些测试类。然后,可以从实例收集一些附加信息。
或者,也许我错过了一些东西。
所以,问题是:是否有可能QTest
获得所有单元测试类的摘要输出?