[erlang-questions] EUnit and Servers

Fred Hebert mononcqc@REDACTED
Sun Sep 27 19:14:55 CEST 2009


On Sun, Sep 27, 2009 at 12:19 PM, Kevin A. Smith
<kevin@REDACTED>wrote:

> 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.
>
> --Kevin
> 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.
>>
>
>
I have tried this before and here's the problem:

http://paste.lisp.org/display/87803#2

The test still passes, even though there's a very obvious ?_assert(a == b)
that should fail. I'M guessing I just don't understand how EUnit is supposed
to work in that case. I'M a bit lost here.


More information about the erlang-questions mailing list