2013-03-15 12 views

Odpowiedz

12

To niemożliwe. Możesz użyć warunku preprocesora -ifdef(TEST)., aby wyeksportować te funkcje tylko podczas kompilacji do testowania.

+0

Próbowałem tego -def (TEST). -export ([ generate_perm_list/2 ]). -endif. W moim module, ale wygląda na to, że makro TEST nie jest zdefiniowane we wspólnym teście. Czy są jakieś inne makra zdefiniowane w Common Test? –

+0

Musisz skompilować swoje moduły do ​​testowania za pomocą zdefiniowanego przez siebie makra TEST. Możesz to zrobić, używając opcji kompilacji '{d, 'TEST'}' lub flagi kompilacji -DTEST. –

+0

Dzięki, że zadziałało –

0

Możesz umieścić prywatne funkcje we własnym module, który eksportuje je wszystkie. Oryginalny moduł może je zaimportować i pozostaną prywatne, a struktura testowa może bezpośrednio wywołać import modułu prywatnego.

1

Jest to trudne ze wspólnego testu, ale można użyć wbudowanych testowych przypadków, aby przetestować prywatne funkcje w module. Następnie można przetestować interfejs publiczny za pomocą testu wspólnego. Rebar będzie automatycznie wykrywać osadzone przypadki testowe po uruchomieniu rebar test.

Oto przykład:

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

Na marginesie, można znaleźć Meck do swoich potrzeb, jeśli trzeba kpić z dala modułu (lub ich części) podczas testowania z EUnit.

Aby uzyskać delikatne wprowadzenie do EUnit, zobacz artykuł Learn You Some Erlang chapter.