2014-03-12 33 views
4

我正在寫一個C++函數來使用TinyXML生成XML。我想驗證由我的函數生成的(相對較小的)樹變成與參考字符串相同的字符串。在C++中用引號括起來的硬編碼字符串比較

// intended XML: 
<element type="correct" /> 

好像要做到這一點比較簡單的方法是參考串硬編碼到代碼:

//assignment 
std::string intended = "<element type=\"correct\" />"; 

然而,爲了躲避引號反斜線防止後續的比較。

#include <tinyxml.h> 
#include <string.h> 
TiXmlElement test = TiXmlElement("element"); 
test.SetAttribute("type", "correct"); 
TiXmlPrinter printer; 
test.Accept(&printer); 
ASSERT_EQ(intended, printer.CStr()); // gtests macro 

輸出:

Value of: printer.CStr() 
Actual: "<element type="correct" />" 
Expected: intended 
Which is: "<element type=\"correct\" />" 
+5

反斜槓不會成爲您在此處顯示的代碼的字符串的一部分。還有其他一些事情正在發生。 http://ideone.com/3H9PB7 –

+0

@tasteslikelemons你可以嘗試'printf()'(或類似的東西)'printer.CStr()'的值到另一個變量(或流)中,看它是否得到正確格式化以符合您的測試案例。 –

+0

也許字符串的編碼方式不同。嘗試輸出這兩個字符串(即使用std :: cout),以便您可以準確查看'printer.CStr()'和'intended'的外觀。 – pqvst

回答

12

googletest Primer頁,我讀了ASSERT_EQ()比較指針。 (只有當它們指向相同的內存位置時它們才相等)。如果你想比較字符串,你應該使用ASSERT_STREQ()

ASSERT_STREQ(intended, printer.CStr()); 
+1

不錯的地方。最奇怪的是診斷輸出消息在預期中但不是實際中轉義引號。 –

+0

完美。在做這個改變時,我也注意到ASSERT_STREQ需要指向char數組的成本 - 可能是爲了防止那些令我困惑的表示不匹配。 – tasteslikelemons

相關問題