[erlang-questions] EUnit fixture: return of Setup

Richard Carlsson richardc@REDACTED
Sat Nov 3 13:08:05 CET 2007


Ludovic Coquelle wrote:
> I have some problem with the EUnit fixture {setup, Setup, Clearup,
> Instanciator}.
> 
> From the doc, I understand that the Instanciator should get the value
> return by the Setup.
> But in the following case, the test fail because assertion is "undefined
> == foo".
> Am I missing something?
> 
> simple_init() ->
>     foo.
> simple_close(R) ->
>     R.
> simple_do(R) ->
>     ?assert(R == foo).
> simple_test_() ->
>     {
>         setup,
>         fun simple_init/0,
>         fun simple_close/1,
>         fun simple_do/1
>     }.

It does get the value from Setup during the test phase, but there is a
previous phase which tries to enumerate the tests, and that will pass
a dummy value ('undefined') to avoid actually running the setup.

Note that the name of your 'simple_do/1' function is misleading: since
it takes a parameter, EUnit assumes that it is (as you said) an
instantiator which should get the value from simple_init/0, and should
*return a test descriptor*, not try to run a test.

If you try the following, you will see what is happening:

simple_do(R) ->
  eunit:debug(R),
  ?_assert(R == foo).  % note the underscore: return test, don't run it

(simple_do/1 is run twice - the first time with R='undefined').

Although EUnit is powerful and compact to write, I know that it
can be hard to keep in mind whether you should currently be writing
test-running code of test-generating code.

    /Richard


-- 
 "Having users is like optimization: the wise course is to delay it."
   -- Paul Graham



More information about the erlang-questions mailing list