我有一个通过 std::cin 接收用户输入的函数:
std::getline(std::cin, in);
并通过将其与正则表达式匹配来创建相应的数据结构。该函数然后返回此数据结构。
我正在使用 boost.test,我想创建一个单元测试来检查在给定一些输入的情况下输出数据类型是否正确。但是我不知道该怎么做,因为输入没有作为参数传递给函数。
编辑:是否有一种简单的方法可以创建一个通过标准输入为函数提供字符串的增强测试用例?
最佳答案
如果您可以访问调用 std::getline
的函数的源代码,那么最简单的解决方案是将其重写为另一个具有相同签名和实现的函数的包装器,但是采用额外的 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);
//...
}
这样,您将能够通过将 std::istringstream
对象传递到 my_func(std: :istream&)
.
如果您无法访问调用 std::getline
的函数的源代码,那么您可以使用的一个技巧是替换描述符中的标准。参见 this answer对于替换标准输出描述符的代码并进行相应修改。
关于c++ - 提升用户输入功能的测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5226521/