2010-11-05 208 views
3

我重載了班級中的左移操作符,並且輸出工作正常,所以例如當我有一行說cout < < obj;我將輸出用逗號分隔的字段。如何比較C++中的兩個ostream對象是否相等?

ostream& operator<<(ostream& output, const MyClass& obj) 
{ 
    output << obj.field1 << ", " << obj.field2; 
    return output; 
} 

我想爲此操作編寫一個測試用例,但我不知道如何將返回的結果與cxxtest中的預期結果進行比較。我嘗試以下,但它沒有工作:

TS_ASSERT_EQUALS(cout << "1, 50.0", cout << obj); 

我應該使用不同的cxxtest動作,或者變更的參數傳遞機制TS_ASSERT_EQUALS?

需要注意的是,當我輸出以下行,我得到了相同的結果:

cout << obj; 
cout << "1, 50.0"; 

注:我收到了一堆編譯器錯誤,當我嘗試,因爲TS_ASSERT_EQUALS無法編譯程序。

回答

2

即使它沒有編譯,你基本上比較cout與自己...

試着寫兩個不同的std::stringstream S,提取它們的字符串值,然後比較這些。

如果您還需要測試ostream標誌,請定義比較功能並使用TS_ASSERT_RELATION