2013-03-15 18 views

risposta

12

È impossibile. È possibile utilizzare la condizione del preprocessore -ifdef(TEST). per esportare tali funzioni solo durante la compilazione per il test.

+0

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? –

+0

È 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. –

+0

Grazie a quello ha funzionato –

0

È 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.

1

È 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.