Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 接受用户输入的函数的boost测试用例_C++_Boost Test - Fatal编程技术网

C++ 接受用户输入的函数的boost测试用例

C++ 接受用户输入的函数的boost测试用例,c++,boost-test,C++,Boost Test,我有一个通过std::cin接收用户输入的函数: std::getline(std::cin, in); 并通过将其与正则表达式匹配来创建相应的数据结构。然后,该函数返回此数据结构 我正在使用boost.test,我想创建一个单元测试来检查在给定一些输入的情况下输出数据类型是否正确。但是,我不知道该怎么做,因为输入不是作为参数传递给函数的 编辑:有没有一种简单的方法可以创建一个boost测试用例,通过标准输入向函数提供一个字符串?如果您可以访问调用std::getline的函数的源代码,那么最

我有一个通过std::cin接收用户输入的函数:

std::getline(std::cin, in);
并通过将其与正则表达式匹配来创建相应的数据结构。然后,该函数返回此数据结构

我正在使用boost.test,我想创建一个单元测试来检查在给定一些输入的情况下输出数据类型是否正确。但是,我不知道该怎么做,因为输入不是作为参数传递给函数的


编辑:有没有一种简单的方法可以创建一个boost测试用例,通过标准输入向函数提供一个字符串?

如果您可以访问调用
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&)
中,在构造的输入序列上测试
my_func
的核心功能


如果您无法访问调用
std::getline
的函数的源代码,那么可以使用的一个技巧是替换描述符中的标准。有关替换标准输出描述符并进行相应修改的代码,请参阅。

可能是一个愚蠢的问题,但是包装类是否应该与包装类具有不同的名称?@oadams:我猜您指的是包装函数和包装函数,对吗?C++支持,所以可以有一个以上的函数名为“代码> MyO-Func。是的,功能-哎呀。