Ho un modulo in Erlang che ha funzioni che non vengono esportate da Erlang. Come posso testare/chiamare queste funzioni utilizzando il framework di test comune?Test di Erlang (non esportato/privato) funzione del modulo utilizzando test comune
risposta
È impossibile. È possibile utilizzare la condizione del preprocessore -ifdef(TEST).
per esportare tali funzioni solo durante la compilazione per il test.
È possibile inserire le funzioni private nel proprio modulo, che le esporta tutte. Il modulo originale può importarli e resteranno privati e il tuo framework di test può chiamare direttamente il modulo privato.
È complicato con Common Test, ma è possibile utilizzare i casi di test incorporati EUnit per verificare le funzioni private in un modulo. È quindi possibile testare l'interfaccia pubblica utilizzando Common Test. Rebar rileva automaticamente i casi di test incorporati quando si esegue rebar test
.
Ecco un esempio:
-module(example).
-export([public/1]).
-ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").
-endif.
%% This function will be tested externally using Common Test
public(Foo) ->
private(Foo + 42).
%% This function is not reachable to CT, so it will be tested using EUnit.
private(Bar) ->
Bar * 2.
%%% Tests
-ifdef(TEST).
private_test() ->
?assertEqual(10, private(5)),
?assertEqual(0, private(0)).
-endif.
Su un lato nota, si potrebbe trovare Meck a proprio piacimento se avete bisogno di prendere in giro via un modulo (o parti di esso) durante il test con EUnit.
Per un'introduzione delicata a EUnit, vedere Learn You Some Erlang chapter.
Nel caso in cui qualcuno si imbatta anche in questo. L'inclusione del file eunit.hrl definisce TEST a meno che NOTEST sia definito prima dell'inclusione. -include_lib ("eunit.hrl"). rif: http://www.erlang.org/download/eunit.hrl
Ho provato questo -ifdef (TEST). -export ([ generate_perm_list/2 ]). -endif. Nel mio modulo ma sembra che la macro TEST non sia definita nel test comune. Esistono altre macro definite in Common Test? –
È necessario compilare i moduli per il test con la macro TEST definita dall'utente. Puoi farlo usando l'opzione di compilatore '{d, 'TEST'}' o -DESTEST. –
Grazie a quello ha funzionato –