2017-08-07 332 views
0

Qt測試框架支持比較指針列表還是我做錯了什麼?Qt單元測試:指針列表中的QCOMPARE函數

我的單元測試源如下:

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不會有任何問題,並返回「通過」輸出。

回答

2

docs您可以讀取QCOMPARE使用比較操作比較值:

的QCOMPARE宏的實際值進行比較,使用 等號操作者的預期值

QListworks in the same way.

這意味着,如果你的列表存儲指針,指針比較運營商正在使用,而不是基礎對象的比較操作符(即指針的值進行比較,而不是值指向的對象)。當指針指向相同的對象時,指針比較相等,並且在您的情況下您有兩個不同的對象,因此它們不相等,即使對象的內容是相同的。

所以答案是:QCOMPARE確實支持比較指針列表 - 它只是不按照您的預期方式工作。指針比較的規則詳細描述在here

+0

感謝KjMag快速回答。我現在明白了。實際上,這對我來說沒有什麼幫助,因爲我將源元素添加到不同位置的列表中,因此它們是完全不同的對象,但測試必須確認它們包含相同的值。在比較它們之前,我需要採取不同的方法並從指針中取出值。再次感謝! – franz

+1

沒問題。如果您確實需要指針,請考慮編寫一個將包裝指針並定義自定義比較運算符的對象,以便比較內部指針指向的值而不是指針本身的值。 – KjMag