2011-09-13 68 views
2

我有一個獲取傳遞給它的ostream的函數。我需要測試ostream以確保它能正常工作。我把print語句放在try語句塊中,用catch語句來捕獲所有的異常。現在爲了測試這是否可行,我需要一些幫助來創建一個不好的ostream來傳遞函數。需要關於如何測試傳遞給函數的ostream的幫助/建議

我嘗試這樣做:

filebuf buffer; 
ostream& out = ostream(&buffer); 
test1.print(out); 

但是當我測試它,我不能去打印我的錯誤信息。什麼是更好的方式來創建一個壞的ostream傳遞給函數。

此外,有沒有更好的方法來檢查ostream比使用try-catch塊?

+0

檢查什麼?定義「壞」。什麼樣的錯誤信息? –

+1

ostream.bad()會告訴你流的狀態 –

+2

'bad'不檢查失敗位,所以它不常用。 –

回答

2

ofstream如何不打開任何文件?

+0

這是一個答案? – iammilind

+1

@iammilind:它回答說:「創建一個傳遞給函數的壞ostream的更好方法是什麼?」。就我個人而言,我認爲這不是問題中最緊急的部分:-) –

+0

@Steve:問題的唯一其他部分是最後一行中的「另外」附錄,我選擇忽略這一部分。 –

2

流不會在一般情況下拋出異常,所以我不希望您的錯誤消息被打印,無論您的操作是否成功。

ios基類有一個名爲exceptions的函數,可以用來控制它,但編寫一個函數來改變參數的狀態是相當反社會的,所以您可能必須確保恢復它(即使它拋出異常...)

測試流上操作成功的常用方法是使用if。如果一切正常,則流評估爲真值,否則爲假值 - 對於條件而言,我的意思是真/假的值,而不是值true或或false

確切地說,如果設置了故障位或壞位,則爲false。當且僅當其中至少有一個設置時,最後的操作「不起作用」。

+0

該死的,今天我很慢:) –

+1

+想象中0.5點,當與Tomalak的答案相結合 - 那麼我們有一個完整的答案! :) – Nim

+0

謝謝,我試圖在嘗試輸出後檢查失敗位並觸發了我的錯誤消息 – DFord