如何使用GTest测试命令行选项解析器



我正在为我的应用程序开发一个命令行选项处理器。我已经决定使用GTest来测试它。它的实现如下所示:

int main(int argv, char **argv)
{
    if (!ProcessOptions(argc, argv)
    {
        return 1;
    }
    // Some more code here
    
    return 0;
}
int ProcessOptions(int argc, char **argv)
{
    for (int i = 1; i < argc; ++i)
    {
        CheckOption(argv[i]);
        CheckArgument();
        if (Success)
        {
            EnableOption();
        }
    }
}

代码按预期运行,但问题是:我想通过提供不同的选项(有效和无效(来使用GTest进行测试

::testing::InitGoogleTest()函数解析命令行googletest标志,并删除所有已识别的标志。这允许用户通过各种标志来控制测试程序的行为我们将在AdvancedGuide中介绍。必须先调用此函数调用RUN_ALL_TESTS(),否则标志将无法正确初始化。

但通过这种方式,我只能测试一个序列。对于不同的选项,我想多次这样做。我该怎么做?

有没有更好的策略来实现这一点?我可以使用测试夹具吗?

您考虑过值参数化测试吗?它们听起来非常适合您的情况:

值参数化测试允许您使用不同的参数测试代码,而无需编写同一测试的多个副本。这在许多情况下都很有用,例如:

  • 您有一段代码,其行为受到一个或多个命令行标志的影响
  • 您想要测试OO接口的不同实现
  • 您希望确保您的代码对这些标志的各种值执行正确

您可以编写一个或多个测试,定义命令行参数解析器的预期行为,然后以这种方式将命令行标志传递给它。

谷歌测试GitHub文档的链接中显示了一个完整的代码示例,但这里有一个快速的概述:

  • 创建一个继承testing::TestWithParam<T>的测试类
  • 使用TEST_P和其中的GetParam()方法来访问参数值
  • 您可以使用INSTANTIATE_TEST_SUITE_P实例化测试。使用testing::Values方法提供值

最新更新