2011-08-28 71 views
6

我有一個C++代碼,它有很多接收ostream作爲參數的函數。我想單元測試這些函數,因爲我必須在執行到函數後驗證ostream對象數據。我可以將輸出流重定向到一個文件,但我想檢查是否可以創建一個臨時緩衝區,並將輸出流重定向到緩衝區並從該緩衝區讀取。如何將ostream對象重定向到臨時緩衝區?

回答

15

您可以在內存中std::ostream使用std::stringstream爲:

#include <iosfwd> 
#include <sstream> 
#include <cassert> 

void my_func(std::ostream& out) { 
    out << "test"; 
} 

int main() { 
    std::ostringstream buf; 
    my_func(buf); 
    assert(buf.str() == "test"); 
} 
+0

如果你想沖洗後,再用'buf',你可以用'buf.str(「」)復位; buf.clear()' –