如何将数据放入cin中的字符串

gre*_*her 3 c++ unit-testing cin

我需要为不是由我编写的小型学习计划编写测试(使用谷歌测试框架).(这只是一个小型控制台游戏,可以从命令行获取模式或只是在运行时获取它)有一个问题:我无法更改源代码,但几乎所有方法都使用cout和cin.我的问题是"如何在测试时回答programm的请求(cin)(比如从字符串获取cin的数据)? ".

Die*_*ühl 5

假设您可以控制main()(或者在要测试的函数之前调用的其他函数),您可以更改std::cin读取位置和std::cout写入位置:

int main(int ac, char* av[]) {
    std::streambuf* orig = std::cin.rdbuf();
    std::istringstream input("whatever");
    std::cin.rdbuf(input.rdbuf());
    // tests go here
    std::cin.rdbuf(orig);
}
Run Code Online (Sandbox Code Playgroud)

(同样std::cout)

此示例保存原始流缓冲区,std::cin以便在离开之前将其替换main().然后设置std::cin为从字符串流中读取.它也可以是任何其他流缓冲区.