我正在为我的应用程序开发一个命令行选项处理器。我已经决定使用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
方法提供值