我有一个从std :: cin读取用户输入的函数,我想编写一个将一些字符串插入std :: cin的unittest,这样以后从std :: cin中提取将读取该字符串而不是暂停键盘输入.
理想情况下,我会更改函数签名,以便我可以将自定义istream作为参数传递,但我不能这样做,因为我有一个我无法更改的固定界面.
cin.putback()几乎就是我想要的,但是它一次只插入一个字符,并且它以相反的顺序插入它们(但是我读到某个地方放回原本不存在的字符可能会有危险,尽管该网站没有详细说明原因).我已经尝试了几种方法将字符串注入cin的内部缓冲区cin.rdbuf(),但没有一种方法可以正常工作.我也考虑过使用外部测试脚本或创建子进程,但是我想首先考虑使用纯C++进行测试.
那么,是否有任何方法将字符串放入cin?或者你知道更好的方式来注入我的"假键盘输入"吗?
Rei*_*ien 15
cin您可以让您的程序接受一般情况而不是搞砸std::istream&.正常运行时,只需通过即可cin.在单元测试期间,将其传递给您自己创建的I/O流.
如果你真的,真的想使用std :: cin,试试这个:
int main() {
using namespace std;
streambuf *backup;
istringstream oss("testdata");
backup = cin.rdbuf();
cin.rdbuf(oss.rdbuf());
string str;
cin >> str;
cout << "read " << str;
}
Run Code Online (Sandbox Code Playgroud)
从备份完成后,您可以恢复std :: cin的streambuf.我不保证这种便携性; P
| 归档时间: |
|
| 查看次数: |
10791 次 |
| 最近记录: |