接受用户输入的函数的 boost 测试用例
我有一个函数,它通过 std::cin: 接收用户输入,
std::getline(std::cin, in);
并通过将其与正则表达式匹配来创建相应的数据结构。然后该函数返回该数据结构。
我正在使用 boost.test,我想创建一个单元测试来检查给定一些输入的输出数据类型是否正确。但是我不知道如何处理它,因为输入没有作为参数传递给函数。
编辑:是否有一种简单的方法来创建一个通过标准输入向函数提供字符串的 boost 测试用例?
I have a function that takes in user input via std::cin:
std::getline(std::cin, in);
and creates a corresponding data structure by matching it with a regular expression. The function then returns this data structure.
I'm using boost.test and I want to create a unit test to check that the output data type is correct given some inputs. However I don't know how to go about it since the input isn't passed as an argument to the function.
EDIT: Is there a simple way to create a boost test case that feeds the function a string via standard input?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您有权访问调用 std::getline 的函数的源代码,那么最简单的解决方案是将其重写为具有相同签名和实现的另一个函数的包装器,但需要额外的用于代替
std::cin
的std::istream&
参数。例如,如果您当前有:然后像这样重写:
这样,您将能够通过传递
std::istringstream
在构建的输入序列上测试my_func
的核心功能> 对象放入my_func(std::istream&)
。如果您无权访问调用 std::getline 的函数的源代码,那么您可以使用的一个技巧是替换描述符中的标准。请参阅此答案用于替换标准输出描述符并进行相应修改的代码。
If you have access to the source code of the function that calls
std::getline
, then the easiest solution is to rewrite it as a wrapper of another function having the same signature and implementation, but taking an additionalstd::istream&
parameter that is used in place ofstd::cin
. For example, if you currently have:Then rewrite like this:
This way, you will be able to test the core functionality of
my_func
on constructed input sequences by passingstd::istringstream
objects intomy_func(std::istream&)
.If you do not have access to the source code of the function that calls
std::getline
, then one trick that you can use is to replace the standard in descriptor. See this answer for code that replaces the standard out descriptor and modify accordingly.