Qt测试框架是否支持比较指针列表或我做错了什么?
我的单元测试源如下:
QList<QString *> list1;
QList<QString *> list2;
list1.append(new QString("test"));
list2.append(new QString("test"));
QCOMPARE(list1, list2);
运行此测试后,我期待通过测试,但测试失败,输出如下:
********* Start testing of ConfigurationTest *********
Config: Using QtTest library 5.5.1, Qt 5.5.1 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 5.4.0 20160609)
FAIL! : ConfigurationTest::test_sample(default) Compared lists differ at index 0.
Actual (list1): <null>
Expected (list2): <null>
Loc: [../unittest/sample_test.cpp(32)]
Totals: 0 passed, 1 failed, 0 skipped, 0 blacklisted
********* Finished testing of ConfigurationTest *********
如果列表包含非指针元素,则 QCOMPARE 没有任何问题并返回"已传递"输出。
在文档中,您可以读到QCOMPARE
使用比较运算符来比较值:
QCOMPARE 宏使用等于运算符。
QList
也以同样的方式工作。
这意味着,如果列表存储指针,则使用指针比较运算符,而不是基础对象的比较运算符(即比较指针的值,而不是指向的对象的值(。当指针指向同一对象时,它们比较相等,在您的情况下,您有两个不同的对象,因此即使对象的内容相同,它们也不相等。
所以答案是:QCOMPARE
确实支持比较指针列表 - 它只是没有按照你预期的方式工作。此处详细介绍了指针比较的规则。