CMake / CTest - Где был определен тест XYZ? - PullRequest
1 голос
/ 26 марта 2020

После сборки CMake / CTest со многими тестами я вижу растущую проблему. Если ctest -R test_some_side_corner_item_XYZ не удается, как я могу систематически отследить место, где кто-то добавил тест test_some_side_corner_item_XYZ?

Я понимаю, что есть проблема, что мы можем добавить макросы поверх add_test(), что делает немного сложнее дать какой-либо четкий ответ - но все же.

Кажется, cmake не имеет очевидных способов добиться этого - и то же самое кажется для ctest.

1 Ответ

2 голосов
/ 26 марта 2020

Вы можете использовать ctest командную строку options , чтобы найти точную строку в вашей иерархии CMakeLists.txt, где был сделан вызов add_test(). Мы можем использовать опцию --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
      }
    ]
  },
...

This перечисляет файл CMakeLists.txt, где add_test() был вызван для этого теста, и номер строки ("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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...