should
MacroTest bodies can include arbitrary code; but to be useful, they need to
check whether the code being tested (or code under test)
does what it is supposed to do. The macro should
is similar to
cl-assert
from the cl package
(see Assertions in Common Lisp Extensions),
but analyzes its argument form and records information that ERT can
display to help debugging.
This test definition
(ert-deftest addition-test () (should (= (+ 1 2) 4)))
will produce this output when run via M-x ert:
F addition-test (ert-test-failed ((should (= (+ 1 2) 4)) :form (= 3 4) :value nil))
In this example, should
recorded the fact that (= (+ 1 2) 4)
reduced to (= 3 4) before it reduced to nil
. When debugging why the
test failed, it helps to know that the function +
returned 3
here. ERT records the return value for any predicate called directly
within should
.
In addition to should
, ERT provides should-not
, which
checks that the predicate returns nil
, and should-error
, which
checks that the form called within it signals an error. An example
use of should-error
:
(ert-deftest test-divide-by-zero () (should-error (/ 1 0) :type 'arith-error))
This checks that dividing one by zero signals an error of type
arith-error
. The :type
argument to should-error
is optional; if absent, any type of error is accepted.
should-error
returns an error description of the error that was
signaled, to allow additional checks to be made. The error
description has the format (ERROR-SYMBOL . DATA)
.
There is no should-not-error
macro since tests that signal an
error fail anyway, so should-not-error
is effectively the
default.
See Understanding Explanations, for more details on what
should
reports.