Quando si utilizza Python eseguo il test della copertura del codice con strumenti come python-coverage e specialmente per django il pacchetto djaango-nose, sto cercando un equivalente in Erlang. Ho già eseguito test con eunit e generato i miei rapporti con surefire ma non ho trovato il modo di eseguire la copertura del codice, qualcuno conosce gli strumenti o la metodologia per farlo?Come eseguire la verifica del test unitario in Erlang
risposta
Se sei rebar
basta aggiungere:
{cover_enabled, true}.
alla prova comune rebar.config
ho usato per controllare le suite di test, poi nelle specifiche di prova è possibile dichiarare una specifica copertura con la tuple {copertina, "percorso coverspec"}:
{include, ["../include"]}.
{suites,"../test", all}.
{logdir,"../results"}.
{cover,"../test/reduce.coverspec"}.
la specifica copertura soprattutto definire il livello di dettagli e l'elenco dei moduli che si vuole analizzare:
{level, details}.
{incl_mods, [calc,calc_store]}.
poi, quando si esegue il test si ottiene una pagina web incrementale, con tutta l'iterazione test che dove fatto, e per ogni i risultati e un link per la sintesi di copertura e quindi il codice sorgente annotato con la il numero di volte in cui è stata valutata una linea.
e la fonte annotata:
File generated from d:/documents and Settings/xxxxxxx/My Documents/git/calc/ebin/../src/calc_store.erl by COVER 2012-06-01 at 10:23:45
****************************************************************************
| -module(calc_store).
|
| -behaviour(gen_server).
|
| -record(state,{var,func}).
| -define(SERVER,?MODULE).
|
| %% gen_server call back
| -export([code_change/3,handle_call/3,handle_cast/2,handle_info/2,init/1,terminate/2]).
|
| %% api
| -export([start_link/0,storevar/2,storefunc/4,getvalue/1,getfunc/1,stop/0]).
|
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
| storevar(Name,Value) ->
1..| gen_server:cast(?MODULE,{storevar,Name,Value}).
|
| storefunc(Name,Par,Desc,Text) ->
3..| gen_server:cast(?MODULE,{storefunc,Name,Par,Desc,Text}).
|
| getvalue(Name) ->
67..| gen_server:call(?MODULE,{readvar,Name}).
|
| getfunc(Name) ->
10..| gen_server:call(?MODULE,{readfunc,Name}).
|
| stop() ->
0..| gen_server:cast(?MODULE,stop).
|
| start_link() ->
1..| gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
|
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
| init([]) ->
| %% register(?MODULE,self()),
1..| {ok,#state{var=dict:new(),func=dict:new()}}.
|
| handle_call({readvar,Name}, _From, State = #state{var=D}) ->
67..| Reply = dict:find(Name,D),
67..| {reply, Reply, State};
| handle_call({readfunc,Name}, _From, State = #state{func=F}) ->
10..| Reply = dict:find(Name,F) ,
10..| {reply, Reply, State};
| handle_call(Request, From, State) ->
0..| io:format("calc_store received call: ~p from ~p~n",[Request,From]),
0..| Reply = ok,
0..| {reply, Reply, State}.
|
| handle_cast(stop,State) ->
0..| {stop,State};
| handle_cast({storevar,Name,Value}, State = #state{var=D}) ->
1..| NewD= dict:store(Name,Value,D),
1..| {noreply, State#state{var=NewD}};
| handle_cast({storefunc,Name,Par,Desc,Text}, State = #state{func=F}) ->
3..| NewF= dict:store(Name,{Par,Desc,Text},F),
3..| {noreply, State#state{func=NewF}};
| handle_cast(Msg, State) ->
0..| io:format("calc_store received cast: ~p~n",[Msg]),
0..| {noreply, State}.
|
| handle_info({'EXIT',_P,shutdown},State) ->
0..| {stop,State};
| handle_info(Msg,State) ->
0..| io:format("calc_state received info: ~p~n",[Msg]),
0..| {noreply,State}.
|
| terminate(_Reason, _State) ->
0..| ok.
|
| code_change(_OldVsn, State, _Extra) ->
0..| {ok, State}.
Hey stiamo effettivamente cercando di eseguire i nostri test EUnit con rebar2 e, sai se è possibile ottenere i dati di copertura senza ** test comuni **? –
Non ho mai ascoltato rebar2. Se si sta parlando di rebar3, è disponibile una funzione di copertura di prova usando l'opzione '{cover_enabled, true}' ed eseguendo i test con il comando 'rebar3 eunit --cover'. Vedi [rebar3] (https://www.rebar3.org/docs/running-tests). Ma non l'ho ancora usato. – Pascal
Grazie! È adorato. :) –
- 1. Test unitario - Come procedere?
- 2. Test unitario ... come migliorarlo
- 3. Test unitario in Ember.js
- 4. Test unitario in C++
- 5. Come avviare il test vecchio e nuovo del test unitario?
- 6. Test unitario su asp.net
- 7. Test unitario del caricamento di file HTML5
- 8. Come test unitario con jasmine e browserify?
- 9. Test unitario con timeout
- 10. Come test unitario JSON parsing
- 11. Test unitario con Oracle
- 12. Test unitario dell'attività del codice WF
- 13. Come test unitario Router route
- 14. Test unitario: obiettivo fondamentale?
- 15. Symfony2: test unitario con sqlite
- 16. Test unitario dei profili Automapper
- 17. Test unitario e SAP
- 18. Thread di test unitario?
- 19. Oggetti wrapper test unitario?
- 20. Test unitario con ServiceLocator
- 21. Scraper schermo test unitario
- 22. Test unitario. Struttura file
- 23. Come scrivere test unitario per "InterruptedException"
- 24. Verifica se la casella di posta è vuota? in erlang
- 25. Profili AutoMapper e test unitario
- 26. Test unitario in QTestLib - esecuzione di test/test singoli in classe/tutti i test
- 27. Test unitario con Moq, Silverlight e NUnit
- 28. Test unitario con Django in Celery 3.1.11?
- 29. Test unitario - Sto facendo bene?
- 30. Test unitario con ingressi lunghi
non sto usando tondo per cemento armato in quanto non ancora confezionato in Debian, preferiscono non installarlo senza pacchetto, grazie per la risposta – Rodolphe
Ho trovato questa risposta cercando di abilitare la copertura del codice per i test più comuni. Se ti trovi sulla stessa barca, potresti dover creare un file aggiuntivo per far funzionare i test più comuni: http://stackoverflow.com/a/28969406/301857 –