静态函数的单元测试设计模式

Unittest design pattern for static functions

本文关键字:设计模式 单元测试 静态函数      更新时间:2023-10-16

我正在编写一段简单的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 库。

使用谷歌模拟库,你可以完全按照你解释的事情做。