我有一个通过std :: cin接收用户输入的函数:
std::getline(std::cin, in);
并通过将其与正则表达式匹配来创建相应的数据结构。然后该函数返回此数据结构。
我正在使用boost.test,我想创建一个单元测试来检查输出数据类型是否正确给定一些输入。但是我不知道如何去做,因为输入不作为参数传递给函数。
编辑:是否有一种简单的方法来创建一个通过标准输入为函数提供字符串的boost测试用例?答案 0 :(得分:7)
如果您可以访问调用std::getline
的函数的源代码,那么最简单的解决方案是将其重写为具有相同签名和实现的另一个函数的包装,但需要额外{{1用于代替std::istream&
的参数。例如,如果您目前有:
std::cin
然后像这样重写:
my_struct my_func()
{
//...
std::getline(std::cin, in);
//...
}
这样,您就可以通过将my_struct my_func(std::istream& is);
inline my_struct my_func()
{
return my_func(std::cin);
}
my_struct my_func(std::istream& is)
{
//...
std::getline(is, in);
//...
}
个对象传递到my_func
来测试构造的输入序列上std::istringstream
的核心功能。
如果您无法访问调用my_func(std::istream&)
的函数的源代码,那么您可以使用的一个技巧是替换描述符中的标准。有关替换标准输出描述符并相应修改的代码,请参阅this answer。