Estoy escribiendo pruebas EUnit para el código Erlang.EUnit no puede probar las funciones privadas
que tienen un módulo de fuente:
-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.
...
...
...
y un módulo de prueba de unidad:
-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)).
...
...
...
Cuando corro eunit:test(prob_list,[verbose])
Dice:
prob_list_tests: probability_test...*failed*
::undef
pero cuando la exportación probability/2
en mi módulo prob_list
, todo está bien.
¿Hay alguna manera de probar las funciones privadas?
Ese es un enfoque razonable (aunque vale la pena señalar que puede tener varias líneas de exportación, lo que puede limpiar un poco las cosas), especialmente si desea separar las pruebas de su unidad en archivos separados y probar sus funciones privadas. El único inconveniente de este enfoque es que esto puede llevar a que el código pase la prueba, pero no se ejecutará de lo contrario si accidentalmente utiliza los métodos privados fuera de los archivos de prueba. –
Para exponer todo al módulo de prueba, puede usar "-compile (export_all)". en lugar de mantener un gran estado de exportación. – goertzenator