静态函数的单元测试设计模式
Unittest design pattern for static functions
我正在编写一段简单的C++类,并试图为代码提供一个单元测试用例。
代码非常简单:
class Foo
{
static int EntryFunction(bool flag)
{
if(flag)
{
TryDownload();
}
else
{
TryDeleteFile();
}
return 0;
}
static void TryDownload()
{
// http download code
}
static void TryDeleteFile()
{
// delete file code
}
}
问题是,根据UT的概念,我们无法在网络连接上进行中继。所以单元测试不能真正运行下载代码。我的最终目标只是测试代码路径,例如:传入TRUE
时,下载代码路径应该命中,否则应该命中删除逻辑。我正在考虑覆盖这个类,所以下载和删除函数可以覆盖为只设置一个标志和noop,但函数是静态的。
我想知道在这种情况下测试它的好方法是什么?
我认为这取决于您的TryDownload和TryDelete函数中的内容。 如果他们使用其他一些对象/函数来执行他们的任务,您可以配置这些对象的模拟,以便您的 TryDownload 和 TryDelete 不知道他们并没有真正下载/删除任何内容。
如果你没有这样的对象/函数(并且所有内容都包含在TryDownload/TryDelete中),有人可能会争辩说代码不太适合单元测试,因为它不能分解成小单元。 在这种情况下,您唯一的选择是实际的 Web 服务(可能在本地主机上运行),让这些功能执行它们的工作。
我可以建议的方法之一是在您的单元测试框架中使用 Google Mock 库。
使用谷歌模拟库,你可以完全按照你解释的事情做。
相关文章:
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- VC++本机单元测试,找不到调试符号
- 用于交叉编译和CMake的预处理器宏的单元测试
- 资源管理设计模式
- C++ 用于单元测试的模板模板
- 提升 1.64 单元测试编译失败
- 用于在回调中调用解析器的设计模式
- 单元测试欧拉到四元数实现失败
- 运行 C++ 单元测试时LNK2005链接错误
- 禁用自动捕获 Googletest 单元测试中的C++异常
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- 使用 Google Test 对自定义断言函数进行单元测试
- 设计帮助 - 为不同类型的消息处理通用接口的设计模式
- 静态函数的单元测试设计模式
- 用于MFC应用程序的任何可测试的架构或设计模式
- 如何在调试模式下绕过单元测试中的断言
- 进行标准库调用的c++方法单元测试的模式
- 设计模式——在c++中,当实现(一组单例)直接从它们的编译单元在某个注册表中自注册时,它被称为什么?