【问题标题】:List location of executables within the CTest test suite列出 CTest 测试套件中可执行文件的位置
【发布时间】:2020-09-21 10:26:48
【问题描述】:

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

由于测试添加如下:

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

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

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

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

 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

testThisFunctiontestThatFunction 是 CMake 目标(单元测试)和

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

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

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

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

【问题讨论】:

    标签: cmake ctest


    【解决方案1】:

    首先,您只需要ctest 命令中的-N--show-only 选项,而不是两者都需要。在您的情况下,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" : 之后。

    【讨论】:

    • 让它工作。感谢您澄清几个选项的问题并为 json-v1 指明方向。我现在可以自己解析了。
    猜你喜欢
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多