Spec-Zone.ru › Elisp

Тестирование покрытия

Edebug предоставляет базовые возможности тестирования покрытия и отображения частоты выполнения.

Тестирование покрытия работает путем сравнения результата каждого выражения с предыдущим результатом; каждая форма в программе считается покрытой, если она возвращала два разных значения с момента начала тестирования покрытия в текущем сеансе Emacs. Таким образом, для проведения тестирования покрытия вашей программы выполните ее в различных условиях и обратите внимание на корректность ее поведения; Edebug сообщит вам, когда вы испробовали достаточно различных условий, чтобы каждая форма вернула два разных значения.

Тестирование покрытия замедляет выполнение, поэтому оно выполняется только в том случае, если edebug-test-coverage не nil. Подсчет частоты выполняется для всех запусков инструментированной функции, даже если режим выполнения — Go-nonstop, и независимо от того, включено ли тестирование покрытия.

Используйте C-x X = (edebug-display-freq-count) для отображения информации о покрытии и частоты вызовов для определения. Просто = (edebug-temp-display-freq-count) отображает ту же информацию временно, только до тех пор, пока вы не нажмете другую клавишу.

Команда: edebug-display-freq-count

Эта команда отображает данные о частоте вызовов для каждой строки текущего определения.

Она вставляет подсчеты частоты в виде комментариев после каждой строки кода. Вы можете отменить все вставки с помощью одной undo команды. Подсчеты отображаются под ‘(’ перед выражением или ‘)’ после выражения, или на последнем символе переменной. Для упрощения отображения подсчет не отображается, если он равен подсчету предыдущего выражения в той же строке.

Символ ‘=’ после подсчета выражения означает, что выражение возвращало одно и то же значение каждый раз, когда оно вычислялось. Другими словами, оно еще не покрыто для целей тестирования покрытия.

Чтобы очистить данные о частоте вызовов и покрытии для определения, просто переинструментируйте его с помощью eval-defun.

Например, после вычисления (fac 5) с точкой останова в исходном коде и установки edebug-test-coverage на t, когда достигается точка останова, данные о частоте выглядят следующим образом:

(defun fac (n)
  (if (= n 0) (edebug))
;#6           1      = =5
  (if (< 0 n)
;#5         =
      (* n (fac (1- n)))
;#    5               0
    1))
;#   0

Строки комментариев показывают, что fac был вызван 6 раз. Первое if утверждение возвращало 5 раз одно и то же значение; то же самое относится к условию во втором if. Рекурсивный вызов fac не возвращал значения вообще.

Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Coverage-Testing.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API