2015-11-16 3 views
0

Я пытаюсь написать несколько 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, поэтому я действительно озадачен. Что тут происходит?

+0

Он отлично работает на Emacs 24.5. Может быть, это вариант http://debbugs.gnu.org/cgi/bugreport.cgi?bug=21701? Попробуйте повторно запустить тест с помощью клавиши «d», надеюсь, вы увидите обратную сторону ошибки. – Lindydancer

+0

Кроме того, 'ert', похоже, не знает о' = ', попробуйте вместо этого использовать' equal'. – Lindydancer

+0

@ Lindydancer В нижней строке сообщения появляется сообщение об ошибке, но все же дает мне «aborted». Я играл больше, и похоже, что он выполняет тесты в алфавитном порядке до тех пор, пока не ударит один из них, а затем распечатает сообщение об ошибке в нижнем минибуфере, а затем отказывается запускать остальные. Я отредактирую с помощью примера - это просто сломан? Выполнение с 'd' дает тот же результат. –

ответ

1

Код, который вы опубликовали, работает в чистом Emacs, начиная с emacs -Q. Скорее всего, это вызвано некоторой библиотекой, которая каким-то образом была загружена.

Смежные вопросы