C++ Qt单元测试:指针列表上的QCOMPARE函数

C++ Qt单元测试:指针列表上的QCOMPARE函数,c++,qt,unit-testing,qttest,C++,Qt,Unit Testing,Qttest,Qt测试框架是否支持比较指针列表,或者我做错了什么 我的单元测试源如下: QList<QString *> list1; QList<QString *> list2; list1.append(new QString("test")); list2.append(new QString("test")); QCOMPARE(list1, list2); QList列表1; QList列表2; 列表1.追加(新的QString(“测试”)); 清单2.追加(新的QS

Qt测试框架是否支持比较指针列表,或者我做错了什么

我的单元测试源如下:

QList<QString *> list1;
QList<QString *> list2;

list1.append(new QString("test"));
list2.append(new QString("test"));

QCOMPARE(list1, list2);
QList列表1;
QList列表2;
列表1.追加(新的QString(“测试”));
清单2.追加(新的QString(“测试”));
QCOMPARE(列表1、列表2);
运行此测试后,我希望通过测试,但测试失败,输出如下:

********* 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 *********
*******开始配置测试的测试*********
配置:使用QtTest库5.5.1、Qt 5.5.1(x86_64-little_endian-lp64共享(动态)发布版本;由GCC 5.4.0 20160609提供)
失败!:ConfigurationTest::测试样本(默认)比较列表在索引0处不同。
实际(清单1):
预期(清单2):
Loc:[../unittest/sample_test.cpp(32)]
总计:0通过,1失败,0跳过,0被列入黑名单
*********完成配置测试的测试*********
如果列表包含非指针元素,则QCOMPARE不会有任何问题,并返回“已通过”的输出。

在中,您可以看到
QCOMPARE
使用比较运算符来比较值:

QCOMPARE宏使用 等于运算符。

QList

这意味着,如果列表存储指针,则使用指针比较运算符,而不是底层对象的比较运算符(即,比较指针的值,而不是指向的对象的值)。指针指向同一个对象时比较相等,在您的例子中,有两个不同的对象,因此即使对象的内容相同,指针也不相等


因此答案是:
QCOMPARE
确实支持比较指针列表-它只是没有按照您预期的方式工作。详细描述了指针比较的规则。

感谢KjMag的快速回答。我现在明白了。实际上,这对我没有多大帮助,因为我将元素附加到源代码中不同位置的列表中,所以它们是完全不同的对象,但测试必须确认它们内部包含相同的值。我需要使用不同的方法,在比较指针之前从指针中取出值。再次感谢!没问题。如果您真的需要指针,请考虑编写一个对象,该对象将包装指针并定义自定义比较运算符,以便比较内部指针指向的值,而不是指针本身的值。