Sto scrivendo test EUnit per il codice Erlang.EUnit non riesce a testare le funzioni private
ho un modulo di origine:
-module(prob_list).
-export([intersection/2,union/2]).
probability([], _Item) -> false;
probability([{First,Probability}|Rest], Item) ->
if
First == Item -> Probability;
true -> probability(Rest, Item)
end.
...
...
...
e un modulo di unità di test:
-module(prob_list_tests).
-include_lib("eunit/include/eunit.hrl").
-define(TEST_LIST,[{3,0.2},{4,0.6},{5,1.0},{6,0.5}]).
-define(TEST_LIST1,[{2,0.9},{3,0.6},{6,0.1},{8,0.5}]).
-define(TEST_UNO_LIST,[{2,0.5}]).
probability_test() -> ?assertNot(prob_list:probability([],3)),
?assertEqual(0.5,prob_list:probability(?TEST_UNO_LIST,2)),
?assertNot(prob_list:probability(?TEST_UNO_LIST,3)),
?assertEqual(0.2,prob_list:probability(?TEST_LIST,3)),
?assertEqual(1.0,prob_list:probability(?TEST_LIST,5)),
?assertNot(prob_list:probability(?TEST_LIST,7)).
...
...
...
Quando eseguo eunit:test(prob_list,[verbose])
si dice:
prob_list_tests: probability_test...*failed*
::undef
ma quando esporto probability/2
nel mio modulo prob_list
, tutto è ok.
Esiste un modo per testare le funzioni private?
Questo è un approccio ragionevole (anche se vale la pena notare che è possibile avere più linee di esportazione, il che potrebbe ripulire un po '), soprattutto se si desidera separare i test dell'unità in file separati e testare le proprie funzioni private. L'unico svantaggio di questo approccio è che questo può portare a un codice che supera il test ma non funzionerà altrimenti se utilizzi accidentalmente i metodi privati al di fuori dei tuoi file di test. –
Per esporre tutto al modulo di test è possibile utilizzare "-compile (export_all)." invece di mantenere una grande dichiarazione di esportazione. – goertzenator