Получение имени текущего теста или функции

«Как получить имя текущего теста?»

Такой вопрос может возникнуть, например, в том случае, когда хочется собрать список всех тестов, отработавших с ошибками, чтобы затем отправить этот список по e-mail’у.

Так как чаще всего запуски тестов организовывают с помощью Test Items, задача сводится к получению имени текущего Test Item’a. Сделать это можно так:

Log.Message(Project.TestItems.Current.Name);

Обратите внимание, что если запустить данный код без использования Test Items, возникнет исключение Object required.

Если же необходимо получить имя именно функции, то в JScript, например, это можно сделать так:

arguments.callee.caller.toString().match(/function\s+([^\s\(]+)/)[1]

Если теперь соединить оба решения, можно написать следующую функцию, которая возвращает либо имя Test Item’a (если это возможно), либо имя функции:

function getCurrentTestName()
{
  try
  {
    return Project.TestItems.Current.Name;
  }
  catch(e)
  {
    return arguments.callee.caller.toString().match(/function\s+([^\s\(]+)/)[1];
  }
}

Если же вы хотите получить полный Call Stack вызовов функций, то сделать это будет сложнее, да и нет необходимости. В случае попадания в лог ошибки, TestComplete автоматически сгенерирует очередь вызовов, просмотреть которую можно на вкладке Call Stack, предварительно выделив в логе ошибку

tcblog_callstack