c++ - Qt 单元测试 : QCOMPARE function on list of pointers

标签 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);

运行此测试后,我期望通过测试,但测试失败并显示以下输出:

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

最佳答案

docs你可以读到 QCOMPARE 使用比较运算符来比较值:

The QCOMPARE macro compares an actual value to an expected value using the equals operator.

QList 也为 works in the same way.

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

所以答案是:QCOMPARE 确实支持比较指针列表 - 它只是没有按您预期的方式工作。指针比较规则详解here .

关于c++ - Qt 单元测试 : QCOMPARE function on list of pointers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45547247/

相关文章:

c# - 如何自动测试我的数据库驱动功能?

c++ - 如何获取程序运行的目录?

c++ - 调整 Qt UI 元素的大小

c++ - Qt/C++中多线程的随机函数调用

python - QWidget showFullScreen 产生多个resizeEvents

java - 减少测试用例之间的耦合

c++ - 计算组合时溢出

c++ - VideoInfoHeader2结构时抓帧

C++:是否定义了负值和大值的左/右位移位?

python - 用模拟替换对象