首页 > 解决方案 > 列出 CTest 测试套件中可执行文件的位置

问题描述

我有一些使用 CMake 编译的源代码,其中包含通过 CMake 指令添加到 CTest 的单元测试add_test()。我想要在这个测试套件中使用的可执行文件列表(绝对/相对路径)。

由于测试添加如下:

add_test(NAME ${A} COMMAND ${execA})
add_test(NAME ${B} COMMAND ${execB})
add_test(NAME ${C} COMMAND ${execA} ${addOptions})

三个测试(、和)只有两个不同的可执行文件(${execA}、)。${execB}${A}${B}${C}

我完全可以重复并忽略选项或有选项。

因此,理想的输出如下(但如果需要,我当然可以手动进行一些解析):

 src/folder1/test/testThisFunction
 src/folder2/test/testThatFunction
 src/folder1/test/testThisFunction -WithThisFlag

我能得到的最接近的是:

ctest -N,--show-only

它不运行测试,而只是显示它们:

    Start 1: testA
1/3 Test #1: testA .......................   Passed    0.01 sec
    Start 2: testB
2/3 Test #2: testB .......................   Passed    0.01 sec
    Start 3: testC
3/3 Test #3: testC ........................  Passed    0.01 sec

不幸的是,此输出不包含有关可执行文件路径的信息。

在上面的这个例子中,假设

${execA} = testThisFunction
${execB} = testThatFunction

CMake目标(单元测试)testThisFunctiontestThatFunction

${A} = "testA"
${B} = "testB"
${C} = "testC"
${addOptions} = "-WithThisFlag"

分别存储测试和选项的名称。

虽然我可以访问CMakeLists.txt,但我强烈希望ctest在 CMake 配置和后续编译已经完成后仅在级别上执行此操作(因此,不使用CMakeLists.txt中的 CMake 命令生成可执行文件列表)。

如果这是相关的,我正在使用 CTest 3.10.2,但可以升级。

标签: cmakectest

解决方案


首先,您只需要命令中的-Nor--show-only选项ctest,而不是两者都需要。在您的情况下,CTest 默默地忽略了您的命令行选项-N,--show-only,因为它未被识别。输出表明您的测试确实运行了。要简单地列出它们,请使用:

ctest --show-only

回答您的问题:如果您升级到 CMake 3.14 或更高版本,您将获得 JSON 格式的ctest --show-only选项。

ctest --show-only=json-v1

这将打印有关每个测试的信息,包括传递给每个测试的参数。您的输出可能包含如下内容:

  "tests" :
  [
    {
      "backtrace" : 1,
      "command" :
      [
        "src/folder1/test/testThisFunction"
      ],
      "config" : "Debug",
      "name" : "testA",
      "properties" :
      [
        {
          "name" : "WORKING_DIRECTORY",
          "value" : "src"
        }
      ]
    },
    {
      "backtrace" : 3,
      "command" :
      [
        "src/folder2/test/testThatFunction"
      ],
      "config" : "Debug",
      "name" : "testB",
      "properties" :
      [
        {
          "name" : "WORKING_DIRECTORY",
          "value" : "src"
        }
      ]
    },
    {
      "backtrace" : 5,
      "command" :
      [
        "src/folder1/test/testThisFunction",
        "-WithThisFlag"
      ],
      "config" : "Debug",
      "name" : "testC",
      "properties" :
      [
        {
          "name" : "WORKING_DIRECTORY",
          "value" : "src"
        }
      ]
    }
  ],

在输出中,可执行文件的完整路径和测试的命令行参数列在"command" :.


推荐阅读