列出 CTest 测试套件中可执行文件的位置
List location of executables within the CTest test suite
我有一些使用 CMake 编译的源代码,其中单元测试通过 CMake 指令添加到 CTest add_test()
。我想要此测试套件中使用的可执行文件列表(absolute/relative 路径)。
由于测试添加如下:
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
其中 testThisFunction
和 testThatFunction
是 CMake 目标(单元测试),
${A} = "testA"
${B} = "testB"
${C} = "testC"
${addOptions} = "-WithThisFlag"
分别存储测试和选项的名称。
虽然我可以访问 CMakeLists.txt,但我强烈希望在 CMake 配置和后续编译完成后仅在 ctest
级别执行此操作(因此,不使用 CMakeLists.txt 中的 CMake 命令生成可执行文件列表)。
如果这是相关的,我正在使用 CTest 3.10.2,但可以升级。
首先,您只需要 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" :
之后。
我有一些使用 CMake 编译的源代码,其中单元测试通过 CMake 指令添加到 CTest add_test()
。我想要此测试套件中使用的可执行文件列表(absolute/relative 路径)。
由于测试添加如下:
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
其中 testThisFunction
和 testThatFunction
是 CMake 目标(单元测试),
${A} = "testA"
${B} = "testB"
${C} = "testC"
${addOptions} = "-WithThisFlag"
分别存储测试和选项的名称。
虽然我可以访问 CMakeLists.txt,但我强烈希望在 CMake 配置和后续编译完成后仅在 ctest
级别执行此操作(因此,不使用 CMakeLists.txt 中的 CMake 命令生成可执行文件列表)。
如果这是相关的,我正在使用 CTest 3.10.2,但可以升级。
首先,您只需要 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" :
之后。