Я пытаюсь написать несколько elisp в первый раз. Я хотел бы иметь возможность запускать на нем модульные тесты.Почему ERT говорит, что мой тест прерван?
У меня есть буфер в нем следующее:
(ert-deftest addition-test()
(should (= (+ 1 2) 4)))
И я побежал M-x eval-buffer
установить ert-deftest
определение в моих Emacs. Когда я бегу M-x ert RET t RET
, я вижу:
Selector: t
Passed: 0
Failed: 0
Total: 0/1
Started at: 2015-11-16 00:27:46-0800
Aborted.
Aborted at: 2015-11-16 00:27:46-0800
A
A addition-test
aborted
И я вижу сообщение «Test не удалось: ....» в минибуфер в нижней части экрана. Почему сообщение об ошибке указано в буфере ERT?
EDIT:
Оказывается, что «прервана» сообщение появляется после того, как тест провал ударил, то все остальные тесты не выполняются. Пример:
(ert-deftest test1()
(should 1))
(ert-deftest test2()
(should nil))
(ert-deftest test3()
(should 1))
M-x eval-buffer RET M-x ert RET
открывает буфер с именем *ert*
, который говорит:
Selector: t
Passed: 1
Failed: 0
Total: 1/3
Started at: 2015-11-16 02:06:57-0800
Aborted.
Aborted at: 2015-11-16 02:06:57-0800
.A-
A test2
aborted
И в *Messages*
я вижу:
Aborted: Ran 3 tests, 1 results were as expected
ert-fail: Test failed: ((should nil) :form nil :value nil)
Если я иду в *ert*
и нажмите d
над test2
, Я получаю следующее в *Messages*
:
Running test test2...ABORTED
ert-fail: Test failed: ((should nil) :form nil :value nil)
я могу убедить его запустить test3
если я ударил войти на -
в .A-
, расширить test3
, а затем нажмите d
на него. Это выглядит следующим образом:
Selector: t
Passed: 2
Failed: 0
Total: 2/3
Started at: 2015-11-16 02:08:40-0800
Aborted.
Aborted at: 2015-11-16 02:08:40-0800
.A.
A test2
aborted
. test3
passed
С точкой зрения получения трассировки, попав b
над test2
дает мне:
ert-results-pop-to-backtrace-for-test-at-point: cl-etypecase failed: [cl-struct-ert-test-aborted-with-non-local-exit (((should nil) :form nil :value nil))], (ert-test-passed ert-test-result-with-condition)
Я не понимаю, выхода трассировки на всех. Такое поведение, похоже, не соответствует тому, что говорит документация ERT, поэтому я действительно озадачен. Что тут происходит?
Он отлично работает на Emacs 24.5. Может быть, это вариант http://debbugs.gnu.org/cgi/bugreport.cgi?bug=21701? Попробуйте повторно запустить тест с помощью клавиши «d», надеюсь, вы увидите обратную сторону ошибки. – Lindydancer
Кроме того, 'ert', похоже, не знает о' = ', попробуйте вместо этого использовать' equal'. – Lindydancer
@ Lindydancer В нижней строке сообщения появляется сообщение об ошибке, но все же дает мне «aborted». Я играл больше, и похоже, что он выполняет тесты в алфавитном порядке до тех пор, пока не ударит один из них, а затем распечатает сообщение об ошибке в нижнем минибуфере, а затем отказывается запускать остальные. Я отредактирую с помощью примера - это просто сломан? Выполнение с 'd' дает тот же результат. –