我的设置是使用gtest测试运行程序的Visual Studio 2015
https://visualstudiogallery.msdn.microsoft.com/94c02701-8043-4851-8458-34f137d10874
一切都很好。但现在我想把命令行参数传递给
int main(int argc, char **argv) {..}
调试时,我可以通过属性->调试->命令参数来传递它们。这很好。
我可以使用test->run->Selected test运行测试,但如何将命令行参数传递给测试?它不会接管调试命令参数。
我为C++单元测试所做的是通过添加在链接后运行的自定义构建步骤,使它们作为构建的一部分运行。自定义生成步骤运行测试。因此,成功的构建意味着代码已编译并链接,测试已通过。这可以保证测试始终在运行(如果没有测试的运行和通过,就无法成功构建)。我在关于测试驱动开发的五部分博客文章中描述了如何在VisualStudio中设置它。
我查看了VS扩展的文档,不清楚它是否支持将任何命令行参数传递给测试可执行文件。然而,使用自定义构建步骤来实现这一点是微不足道的。你可以考虑使用问答;Visual Studio库页面中该扩展的一部分,用于查看它们是否支持传递命令行参数。
另一种解决方法是在环境变量中设置参数,并使用getenv()(至少是跨平台)在main中调用。
int main(int argc, char * argv[])
{
if(argc== 1)
{
char* path = getenv("your-argument-env-variable");
// check if path is not null
}
else
{
// Default reading from command argument
}
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}