在Visual Studio(VS)中使用Google Test(gtest)时,如果你尝试在父目录级别执行测试用例,但期望它能够自动发现并执行所有子目录中的测试用例,这通常不是gtest或VS的默认行为。gtest本身并不具备递归遍历目录以查找和执行测试用例的功能。
gtest的执行是基于单个可执行文件的,每个可执行文件通常包含了一组相关的测试用例。在VS中,你通常会为每个测试项目(可能对应于一个或多个源代码文件)创建一个可执行文件。如果你的测试用例分布在不同的子目录中,并且每个子目录都有其对应的测试项目,那么你需要为每个测试项目分别编译生成可执行文件,并分别运行它们来执行所有测试用例。
然而,有几种方法可以在一定程度上简化这个过程:
编写一个脚本:你可以编写一个批处理脚本(Windows)或shell脚本(Linux/macOS),该脚本遍历所有包含gtest可执行文件的子目录,并在每个子目录中执行相应的测试程序。这样,你就可以通过一个命令来运行所有测试。
使用CTest:CMake提供的CTest是一个跨平台的自动化测试系统,它可以与gtest集成。你可以使用CMake来配置你的项目,并生成一个CTest测试列表,该列表包含了所有gtest可执行文件。然后,你可以使用CTest命令来运行所有测试,而无需手动执行每个可执行文件。
在VS中设置多个测试项目:在VS的解决方案中,你可以设置多个测试项目,每个项目对应于一个子目录中的测试用例。然后,你可以使用VS的测试资源管理器来同时运行所有测试项目。虽然这需要在VS中进行一些手动设置,但它可以提供一个集成的测试环境。
使用VS的命令行工具:VS提供了命令行工具(如mstest、vstest.console.exe等),你可以编写一个批处理脚本来调用这些工具,并指定要运行的测试程序列表。这种方法与编写自定义脚本类似,但利用了VS的内置工具。
请注意,上述方法中的每一种都有其适用场景和限制。选择哪种方法取决于你的具体需求、项目结构和开发环境。如果你的项目非常大,包含许多子目录和测试用例,那么编写一个自动化脚本来管理测试可能会更加高效。