我有一個函數,讀取std :: cin的用戶輸入,我想寫一個單元測試插入一些字符串到std :: cin,以便以後從std :: cin提取將讀取該字符串而不是暫停鍵盤輸入。注入字符串'cin'
理想情況下,我會更改函數簽名,以便我可以傳遞一個自定義istream作爲參數,但是我不能這樣做,因爲我有一個固定的接口,我無法更改。我想要什麼,但是它一次只插入一個字符,並且它以相反的順序插入它們(但是我在某處讀取了原本並不是最初的字符可能會有危險,但網站沒有詳細說明原因)。我已經嘗試了幾種方法將字符串注入到cin的內部緩衝區cin.rdbuf()中,但沒有一個可以工作。我也考慮過使用外部測試腳本或創建子進程,但是我想先考慮純C++中的測試。
那麼,有沒有什麼方法將字符串放入cin中?或者你知道一個更好的方法來注入我的「假鍵盤輸入」?
+1。或'stringbuf sb(「testdata」); streambuf * backup = cin.rdbuf(&sb);''。它符合規範,並且是合理的可移植的,但不是很好的做法。哦,是的,一旦輸入用完,他可能必須執行'cin.clear()'來逃避EOF條件:vP。 – Potatoswatter 2010-09-26 10:38:59
+1正是我所要求的(我仍然親自想知道,不管做這樣的事情是個好主意,即使對於白盒測試代碼也是如此)。 – 2010-09-26 11:42:12