Does? Does AssertException really work with gen_fsm: startlink?

I have the following init method in the gen_fsm callback module (my_fsm):

init(Args) when length(Args) =:= 2 ->
   % do work with Args here
   {ok, my_state, InitialState}.

There is no other init method in the callback module.

I want to write unit test using eunit, where I claim that calling gen_fsm with a list argument that does not contain two elements does not work:

start_link_without_args_exits_test() ->
   ?assertException(exit, _, gen_fsm:start_link(my_fsm, [], [])).

However, when the test runs, eunit skips the test with the message:

undefined
*unexpected termination of test process*
::{function_clause,[{my_fsm,init,[[]]},
                    {gen_fsm,init_it,6},
                    {proc_lib,init_p_do_apply,3}]}{proc_lib,init_p_do_apply,3}]}

Why doesn't the test "catch" this error and report it as a passed test?

+3
source share
1 answer

gen_fsm. init/1 , gen_fsm . - , ( proc_lib:init_ack/1-2), exit(Error).

start_link , - . start, process_flag(trap_exit,true), , , .

?assertException(exit, _, gen_fsm:start_link(my_fsm, [], [])).

-

?assertMatch({error,{function_clause,[{my_fsm,init,_} | _]}}, 
             gen_fsm:start_link(my_fsm, [], [])) 

.

+3

Source: https://habr.com/ru/post/1772078/


All Articles