2012-10-01 1 views
1

J'ai un gen_server qui exporte une fonction comme ceci:comment ce genre de erlang gen_server devrait être testé?

my_function(Param) -> 
    gen_server:cast(?SERVER, {forward, Param}). 

et a un handle_cast comme celui-ci:

handle_cast({forward, Param}, #state{peer=Socket} = State) -> 
    gen_tcp:send(Socket, Param), 
    {noreply, State}. 

Dans la plupart des cas, le poste qui est connecté à l'aide gen_tcp répondra avec l'un d'entre différents messages, et je gérer la réponse dans le handle_info

handle_info({tcp, Socket, Data}) -> 
    io:format("Received : ~p~n", [Data]), 
    {noreply, State}. 

Est-il possible recommandé de tester ce genre de scénario dans Erlang?

Répondre

0

Vous pouvez utiliser les fonctions de configuration/teardown afin de faire quelque chose comme ça:

my_test_() -> { 
    setup, 
    fun() -> my_server:start_link() end, 
    fun(_) -> my_server:stop() end, 
    fun() -> 
     %% here you do all the message sending and such 
    end 
}. 

Vous devez également exporter un arrêt/0 fonction qui sera responsable de l'appel/a lancé le gen_server afin d'arrêter il.

Vous pouvez en savoir plus d'infos sur les appareils here

HTH, Alin

+0

je connais les appareils, mais le problème est que j'ai l'expérience uniquement avec gen_server: appel où le retour est en quelque sorte fixé. Comment puis-je relier les données envoyées en utilisant la fonction au résultat obtenu dans handle_info? – user601836

+0

Si ma compréhension est correcte, vous voulez envoyer des messages de cette façon qu'ils seront traités par handle_info? – Alin

+0

non, une fois que le message est envoyé dans le handle_cast en utilisant les sockets, je vais gérer la réponse dans le handle_info puisque la réponse viendra via socket – user601836

Questions connexes