gre*_*her 3 c++ unit-testing cin
我需要为不是由我编写的小型学习计划编写测试(使用谷歌测试框架).(这只是一个小型控制台游戏,可以从命令行获取模式或只是在运行时获取它)有一个问题:我无法更改源代码,但几乎所有方法都使用cout和cin.我的问题是"如何在测试时回答programm的请求(cin)(比如从字符串获取cin的数据)? ".
假设您可以控制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为从字符串流中读取.它也可以是任何其他流缓冲区.
| 归档时间: |
|
| 查看次数: |
5859 次 |
| 最近记录: |