erlang eunit

erlang - Informe de error de un proceso terminado(se espera que sea normal)



eunit (1)

Tengo un módulo de prueba que prueba mi módulo de Table . Table módulo My Table , cuando termina, lo llama así:

terminate(_, State = {Board, Status, Players}) -> gen_server:stop(Board), ...stopping other processes, io:format("Table Terminating.~p~n", [State]), ok.

Esta es la única parte de mi código que detendría un proceso de la Board .

Después de ejecutar mis pruebas, obtendré esto después de aproximadamente un minuto:

=ERROR REPORT==== 21-Jul-2017::22:28:40 === ** Generic server <0.92.0> terminating ** Last message in was [] ** When Server state == [[{spawn,x,none}, {recent,x,none}, {empty,null,none}, {empty,null,none}, {empty,null,none}], [{empty,null,none}, {empty,null,none}, {empty,null,none}, {ridge,null,none}, {empty,null,none}], [{empty,null,none}, {empty,null,none}, {ridge,null,none}, {empty,null,none}, {empty,null,none}], [{empty,null,none}, {ridge,null,none}, {empty,null,none}, {empty,null,none}, {empty,null,none}], [{empty,null,none}, {empty,null,none}, {empty,null,none}, {empty,null,none}, {spawn,o,none}]] ** Reason for termination == ** {terminated,[{io,format, [<0.90.0>,"Board.~p~n", [[[{spawn,x,none}, {recent,x,none}, {empty,null,none}, {empty,null,none}, {empty,null,none}], [{empty,null,none}, {empty,null,none}, {empty,null,none}, {ridge,null,none}, {empty,null,none}], [{empty,null,none}, {empty,null,none}, {ridge,null,none}, {empty,null,none}, {empty,null,none}], [{empty,null,none}, {ridge,null,none}, {empty,null,none}, {empty,null,none}, {empty,null,none}], [{empty,null,none}, {empty,null,none}, {empty,null,none}, {empty,null,none}, {spawn,o,none}]]]], []}, {board,terminate,2,[{file,"board.erl"},{line,319}]}, {gen_server,try_terminate,3, [{file,"gen_server.erl"},{line,629}]}, {gen_server,terminate,7,[{file,"gen_server.erl"},{line,795}]}, {proc_lib,init_p_do_apply,3, [{file,"proc_lib.erl"},{line,247}]}]

que parece que el módulo de la Board terminó incorrectamente. La terminación de la Board es tal:

terminate(normal, State) -> io:format("Board.~p~n", [State]), ok.

Traté de reproducir esto en un módulo independiente, b :

-module(b). -compile(export_all). init([]) -> {ok, {1, 2}}. terminate(_, State) -> io:format("Table Terminating.~p~n", [State]), ok. code_change(_OldVsn, State, _Extra) -> {ok, State}. handle_cast(_, State) -> {noreply, State}. handle_info(Msg, State) -> io:format("Unexpected message: ~p~n",[Msg]), {noreply, State}. go() -> gen_server:start_link(?MODULE, [], []).

Sin éxito:

4> {ok, B} = b:go(). {ok,<0.74.0>} 5> gen_server:stop(B). Table Terminating.{1,2}

Lo que me pregunto es, ¿qué tipo de código debería buscar para que mi Junta obtenga la ** Reason for termination == ** {terminated razón por la cual se suspendió?

La fuente completa está aquí: [email protected]: QuantumProductions / tunnel.git

Editar: el tablero incluye esto

handle_call(stop, _From, State) -> {stop, normal, shutdown_ok, State}; handle_call(_, _, Board) -> {reply, {error, unrecognized, Board}, Board}.

EDITAR: Mi mejor estimación es eunit se terminan automáticamente los procesos creados dentro de sus pruebas?


¿Por qué borad último mensaje es [] ? De acuerdo con el código que utilizó gen_server:stop/1 que llama a gen:stop/1 que llama a gen:stop/3 que llama a proc_lib:stop/3 que finalmente llama a sys:terminate/3 . Cuando llamas a sys:terminate/3 para gen_server, sys llama gen_server:system_terminate/4 y llama a gen_server:terminate/6 con [] como último mensaje!

¿por qué borad terminó con razón {terminated, ...} ? De acuerdo con el código io , io:format/2 finalmente llama a io:execute_request/2 y lo obtuvo porque el proceso io finalizó y aquí se convierte en {terminated, ...} .