为什么ERT说我的测试中止了?

时间:2015-11-16 08:09:47

标签: unit-testing emacs elisp ert

我第一次尝试写一些elisp。我希望能够对它进行单元测试。

我有一个缓冲区,其中包含以下内容:

(ert-deftest addition-test ()
  (should (= (+ 1 2) 4)))

我运行M-x eval-bufferert-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

我看到了消息"测试失败:......"在屏幕底部的迷你缓冲区中。为什么在ERT缓冲区中报告失败?

编辑:

似乎"中止"如果在测试失败后发生错误消息,那么任何剩余的测试都不会运行。例如:

(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文档所说的相符,所以我真的很困惑。这里发生了什么?

1 个答案:

答案 0 :(得分:1)

您发布的代码在以emacs -Q开头的干净Emacs中运行。最有可能的是,它是由一些以某种方式加载的库引起的。