c++ - 提升用户输入功能的测试用例

标签 c++ boost-test

我有一个通过 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/

相关文章:

c++ - 在 Eclipse 中调试 Boost.Test : debugger won't stop at break points

c++ - BOOST单元测试堆栈溢出

c++ - 从 boost::property_tree::ptree::iterator 获取 ptree

c++ - 在面向对象的 C++ 中处理大数字变量

c++ - 如果为空,则从 QListWidget 中删除可编辑项

c++ - 升压测试应用程序初始化

c++ - Boost::Test——Main() 的生成?

windows - 使用 mingw 编译器错误 : putenv not declared 在 Windows 上进行增强测试

c++ - 从 Objdump 实用程序检索 vptr(指向虚拟表又名 VTABLE 的指针)?

C++ 在另一个函数中调用函数