在用许多测试构建了CMake/CTest设置之后,我看到了一个日益严重的问题。如果ctest -R test_some_side_corner_item_XYZ
失败,我如何系统地追踪到有人添加测试test_some_side_corner_item_XYZ
的地方?
我知道有一个问题,我们可以在add_test()
上添加宏,这让我们更难做出任何明确的答案,但仍然如此。
cmake
似乎没有任何明显的方法来实现这一点,ctest
也是如此。
您可以使用ctest
命令行选项在进行add_test()
调用的CMakeLists.txt层次结构中查找精确的行。我们可以使用--show-only=json-v1
选项来显示关于测试的JSON格式的元数据:
ctest -R test_some_side_corner_item_XYZ --show-only=json-v1
这个打印的例子是:
{
"backtraceGraph" :
{
"commands" :
[
"add_test"
],
"files" :
[
"C:/workspace/myproject/CMakeLists.txt"
],
"nodes" :
[
{
"file" : 0
},
{
"command" : 0,
"file" : 0,
"line" : 34,
"parent" : 0
}
]
},
...
这列出了为该测试调用add_test()
的CMakeLists.txt
文件,以及调用它的行号("line" : 34
(。
从CMake文档中,--show-only
选项实际上不会运行测试,但只会显示其信息:
-N,--show-only[=<format>]
禁用测试的实际执行。
此选项告诉CTest列出将要运行但未实际运行的测试。与
-R
和-E
选项结合使用非常有用。
注意,-R
选项是一个正则表达式,用于匹配您想要的测试,因此要获得精确的匹配,您可以用^
和$
:锚定测试名称
ctest -R ^test_some_side_corner_item_XYZ$ --show-only=json-v1