[erlang-questions] EUnit and Servers

Jachym Holecek freza@REDACTED
Sun Sep 27 19:28:26 CEST 2009


# Fred Hebert (MononcQc) 2009-09-27:
> I have used EUnit before, but rarely did server testing with it. I decided
> to give it a hand with some toy code of mine, but I'm getting errors I'm not
> able to understand the cause of. I'm not willing to blame the tools (eunit)
> before the tool (me), so I'm asking for help here:
> 
> Here's a paste of the test module:
> http://paste.lisp.org/display/87803

    status_test_() ->
        {setup, fun() -> box:start_link(200) end, fun(_) -> box:stop() end,
         fun() ->
            {inorder,
              [?assert(close_enough(box:get_status(),
                                    get_val(box:init(200)))),
               ?assert(close_enough(begin
                                      box:get_air(100),
                                      box:get_status()
                                    end,
                                    get_val(box:init(100))))]}
         end}.

I think that you need one of the following (in all the tests you pasted):

  (1) Make the test function have arity one (not zero) and use ?_assert()
      as Kevin points out. This is probably the right thing to do.

  (2) Keep the test function of arity zero, but change the body to simply
      the two ?assert()s executed in a row. This is probably less right.

Now, (2) is equivalent to what you have now, execution-wise, which makes
me suspect there's something wrong with either box:start_link/1 or
box:stop/0.

Wild speculation: does box:stop/0 guarantee the server is stone dead by
the time it returns? Because if not, the box server could live a little
while longer, making box:start_link/1 in the next test silently fail,
and dying right afterwards, making box:get_status/0 explode.

And one perhaps obvious note: making stop() into a synchronous call is
not good enough -- the thing isn't dead unless you've seen corresponding
'EXIT' or 'DOWN' message.

HTH,
	-- Jachym


More information about the erlang-questions mailing list