Unit testing in Lisp

There are some frameworks and libraries available for doing unit tests in Common Lisp. You’ll find a list for example in Wikipedia.

I have decided to have a look at lisp-unit from Chris Riesbeck, Associate Professor in the Department of Electrical Engineering and Computer Science at Northwestern University.

It is very easy to use lisp-unit. You define a package for your tests and use the lisp-unit package to have access to the defined assertion forms. In your defined package you define your tests that use the functions you want to test. lisp-unit supports test-driven development, so in your tests, you can use functions that are not defined yet. The following will test a function named ‘add’.

(defpackage :mhnfoo-tests
  (:use :common-lisp :lisp-unit :mhnfoo))

(in-package :mhnfoo-tests)

(define-test mhnfoo
  (assert-true (eql 3 (add 1 2))))

Here is a very simple implementation of the function ‘add’.

(defpackage :mhnfoo
  (:use :common-lisp)
  (:export #:add))

(in-package :mhnfoo)

(defun add (x y) (+ x y))

Now you can run all the tests in your test package as follows. I’m using CLISP on Microsoft Windows 7 for this example. The ‘[6]>’ and ‘[7]>’ are the prompts of CLISP.

[6]> (lisp-unit:run-all-tests :mhnfoo-tests)
MHNFOO: 1 assertions passed, 0 failed.

[7]>

As you see, it is very easy to do unit testing in Common Lisp. And lisp-unit is just one file to load.

Comment