1

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 没有任何问题并返回“通过”输出。

4

1 回答 1

3

文档中,您可以阅读QCOMPARE使用比较运算符来比较值:

QCOMPARE 宏使用等号运算符将实际值与预期值进行比较。

QList以同样的方式工作。

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

所以答案是:QCOMPARE确实支持比较指针列表 - 它只是无法按您预期的方式工作。这里详细介绍了指针比较的规则。

于 2017-08-07T13:09:14.427 回答