为单元测试操作内部函数的返回值
Manipulating return value of inner function for unit testing?
我目前正试图为一些遗留代码编写单元测试。在一个函数中,它会调用另一个函数。根据内部函数的返回值,存在三个分支条件。代码是用c++编写的,我使用的是cxxtest框架。如何在不进入实现的情况下操作内部函数的返回值,从而通过所有分支条件?我倾向于避免函数之间的依赖关系。有什么办法可以做到吗?
函数之间已经存在依赖关系。一个呼叫另一个
解决方法是改变外部函数,将内部函数作为参数。然后你可以传入一个函数,它在测试时返回任何你想要的值,在应用程序的其余部分传入有用的函数。
可能在编译时绑定,例如
struct inner_function {int operator()();}
struct mock {int operator ()();}
template <typename F = inner_function>
int outer_function()
{
if (F {}())
return 1;
else
return 2;
}
// in a test
int r = outer_function <mock>();
如果您愿意,可以在运行时使用函数指针执行此操作。我可能还会添加另一个包装器来对客户端代码隐藏模板
我找到了一个解决方案。我已经创建了一个新的头文件new_header.hpp。在文件中添加了与socket函数相同语法的函数,如下所示:
int socket(int domain, int type, int protocol)
{
if(domain == CONST1)
return -1;
else if(domain == CONST2)
return 1;
}
然后在cmake文件中,我创建了一个库来运行UT。我添加了这个新的new_header.hpp和其他必需的文件作为依赖项。此外,我已经将这个文件包含在我新创建的UT文件的头文件中。瞧,通过操纵参数中的一个值,我就能够模拟所需的函数了。为用户定义函数添加mock也以同样的方式工作。
相关文章:
- 从python中调用C++函数并获取返回值
- 编写以 C++ 为单位返回值的函数
- 从类型bankAccount的返回值到函数返回类型int没有可行的转换
- 返回具有C++字符串返回值的函数的本地 C 字符串
- C++,如何将返回值的函数传递给 func
- 使用模板返回值从函数中删除类型
- 检测参数类型、值以及另一个函数的名称和返回值的函数
- 在返回值的函数中使用内部循环返回
- 可能返回值也可能不返回值的函数的迭代器缩减器模式
- 使用引用的Void函数与在C++中返回值的函数相比
- pthread函数的返回值与函数内的计算值不同
- c.vim c/c++ 插件将函数的返回值放在函数上方,没关系
- 返回值的c++函数,需要帮助优化
- nullptr类型的宏返回值与函数类型不匹配
- 必须返回值,函数重载
- 错误C4716:必须返回一个值,由实际返回值的函数抛出
- 用结构向量作为返回值的c++函数
- 如何判断有返回值的函数没有结果
- 如果我不将返回值放入原型返回值的函数怎么办
- 为单元测试操作内部函数的返回值