[erlang-questions] EUnit and Servers

Kevin A. Smith kevin@REDACTED
Sun Sep 27 18:19:06 CEST 2009

Whenever I get errors like that it means the tests are running before  
setup. I haven't used the inorder directive at all but you could try  
changing the macros to their underscore equivalent like this: ?assert - 
 > ?_assert, etc.

On Sep 27, 2009, at 12:04 PM, Fred Hebert (MononcQc) wrote:

> 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
> I don't think it's really important to understand the intricacies of  
> the
> functions from box or air, but you can get a quick description at  
> the bottom
> of this post if you want.
> When running the tests, I get the result:
> 20> c("tests/box_tests").
> {ok,box_tests}
> 21> eunit:test(box).
> box_tests: status_test_...*failed*
> ::exit:{noproc,{gen_server,call,[box,get_status]}}
> in function gen_server:call/2
> in call from box_tests:'-status_test_/0-fun-2-'/0
> in call from box_tests:'-status_test_/0-fun-4-'/0
> =======================================================
> Failed: 1. Skipped: 0. Passed: 5.
> So it seems like the box:start_link/0 function for this specific test
> failed somehow.
> What happens when I just add a second version of  add_test_/0 and  
> name it
> add2_test_/0 is that now, add_test_/0 *AND* status_test_/0 now both  
> fail,
> but add2_test_/0 won't fail.
> I'm not quite sure why this happens; all test setups are pretty much  
> the
> same, but some work and others won't. I have obviously done  
> something wrong
> but can't find what. Anyone got an idea? (I'm guessing race  
> conditions on
> start_link/1s and stop/0s, but I'm not quite sure).
> Thanks in advance.
> ---------------------------------------
> description of the functions:
> air defines an #air{} record with quantities of oxygen, co2, n2 and  
> argon in
> it. air provides functions to work on them: total of gases, the  
> ratio of
> each of them, a map and mergewith function (applying a function on  
> each
> element of the record, returning a new one), etc.
> box is a server holding a quantity of gas. get_air/1 will subtract a
> quantity of air from the box. add_air/1 will add air (as the name  
> says it)
> and get_status/0 shows the quantity of each gas in the box. init/1  
> is called
> all the time because it will create a new #air{} record with  
> proportions
> similar to what we've got in the atmosphere.

More information about the erlang-questions mailing list