Mam moduł w Erlang, który ma funkcje, które nie są eksportowane przez Erlang. Jak mogę przetestować/wywołać te funkcje za pomocą wspólnej platformy testowej?Funkcja testu Erlanga (Nie eksportowany/prywatny) modułu używającego wspólnego testu
Odpowiedz
To niemożliwe. Możesz użyć warunku preprocesora -ifdef(TEST).
, aby wyeksportować te funkcje tylko podczas kompilacji do testowania.
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.
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.
Na wszelki wypadek, gdy ktoś również się z tym spotka. W tym pliku eunit.hrl definiuje się TEST, chyba że NOTEST jest zdefiniowany przed zawarciem. -include_lib ("eunit.hrl"). ref: http://www.erlang.org/download/eunit.hrl
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? –
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. –
Dzięki, że zadziałało –