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
- 1. Funkcja pojedynczej konfiguracji testu nosowego raz wywoływana
- 2. Monkey-patch to wbudowana funkcja testu jednostki?
- 3. Pusta treść testu wiosennego testu mvc
- 4. VS2012 - brakuje testu?
- 5. nie używając testu JUnit Wiosna
- 6. Wyłącz rejestrowanie podczas testu manage.py?
- 7. Baza danych testu Django wygląda pusto podczas testu jest uruchamiana
- 8. Jak usunąć modułu używającego Anaconda w Pythonie
- 9. Jak usunąć klasę testu Swift Xcode z nawigatora testu?
- 10. Wymuszenie niepowodzenia testu jaśminowego
- 11. Pomijanie testu w Qunit
- 12. Ogólna klasa testu JUnit
- 13. Błąd testu Regex - Java
- 14. Konfiguracja testu stacji dokującej
- 15. Historia testu Intellijusa
- 16. Uwierzytelnianie testu funkcjonalnego Symfony2
- 17. GitLab sidekiq braku testu
- 18. JUnit opis testu
- 19. Jednostka Graficzna testu
- 20. Dzienniki poświadczeń testu Twilio
- 21. Budowanie testu Środowisko Citrix
- 22. Android zadania testu gradowego
- 23. testy testu równoległego
- 24. Korzystanie Android Framework testu
- 25. Wyszukiwanie rejestratora testu kątomierza
- 26. Perl: Jaka jest definicja testu?
- 27. TeamCity nie DLL jakiegoś testu NUnit projektów
- 28. Maven nie wykonuje żadnego testu jednostkowego
- 29. Eclipse nie widzi mojego nowego testu junitowego
- 30. Nie generuj testu automatycznie w Railsach
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 –