Ich bin neu in Erlang. Es hat 2 Test-Frameworks: EUnit und Common Test. Ich bin verwirrt, wenn man einen über den anderen benutzt. Kann mir jemand erklären, welche Vorteile EUnit gegenüber Common Test hat und umgekehrt? Seem Common Test kann alles, was EUnit tun kann und vieles mehr, nicht sicher, was ich EUnit verwenden soll. Vielen Dank!EUnit vs Common Test
Antwort
Eunit ist wirklich einfach und passt sehr gut für Modultest oder Bibliothekentest auf White-Box-Ebene. Es ist in Betonstahl integriert.
Gemeinsame Test ist mehr für Black-Box-Tests und Anwendung und System der Anwendung Test ausgerichtet. Es kommt mit Testabdeckung sehr leicht.
bearbeiten (nach Andy Kommentar):
Es ist richtig, dass Sie gemeinsamen Test für eine einheitlichen weißen Box-Test verwenden können, sowie es richtig ist, dass Sie eunit bis zu einem gewissen Anwendungstest mit Geräten nutzen können.
Allerdings ist eUnit sehr praktisch für einen einfachen einheitlichen Test: Sie schreiben eine Funktion myFun, fügen Sie eine Testfunktion myFun_test oder einen Testgenerator myFun_test_ (nützlich, um viele Muster zu testen, auch wenn einige Tests in der Mitte fehlschlägt) in Ihrem Testmodul und das ist es. Sie können es beliebig oft ausführen (keine Testhistorie).
Der allgemeine Test fordert Sie auf, jeden Testfall in der all-Funktion oder in einer Gruppe aufzulisten. Soweit ich weiß, hat es keinen Testgenerator, daher ist es weniger einfach, alle Testmuster jeder Funktion zu durchlaufen. Deshalb denke ich, dass es weniger an einheitliche White-Box-Tests angepasst ist. Auf der anderen Seite sind die init_per_testcase, init_per_group ... viel flexibler als eunit Fixtures, um die Tests zu organisieren, wenn sie einen bestimmten Anwendungskontext benötigen. Common Test führt auch einen Verlauf aller Tests im Log-Verzeichnis. Es ist nett, aber ich schlage vor, die Anzahl der Runs zu begrenzen, um sie nützlich zu halten.
EDIT:
Um das Problem der nicht exportierten Funktionen zu vermeiden, sowohl für eunit und gemeinsamen Test, es möglich ist, definiert zu verwenden. zum Beispiel in rebar.config (weil ich separate Dateien für eunit Tests verwenden):
{eunit_compile_opts, [{d,'EUNIT_TEST',true}]}.
{erl_opts, [debug_info, warn_export_all]}.
und in einem Modul, wenn es notwendig ist:
%% export all functions when used in eunit context
-ifdef(EUNIT_TEST).
-compile(export_all).
-endif.
Sie überprüfen können, dass sie ändern nur die kompilierte Code für eunit
D:\git\helper>rebar clean eunit compile
==> helper (clean)
==> helper (eunit)
Compiled test/help_list_tests.erl
Compiled test/help_ets_tests.erl
Compiled test/help_num_tests.erl
Compiled src/help_ets.erl
Compiled src/help_list.erl
Compiled src/helper.erl
src/help_num.erl:6: Warning: export_all flag enabled - all functions will be exported
Compiled src/help_num.erl
Compiled src/help_code.erl
All 31 tests passed.
Cover analysis: d:/git/helper/.eunit/index.html
==> helper (compile)
Compiled src/help_ets.erl
Compiled src/help_list.erl
Compiled src/helper.erl
Compiled src/help_num.erl
Compiled src/help_code.erl
Learn you some erlang (eines der besten Online-Ressourcen für erlang, neben dem offiziellen doc) erklärt, beide Methoden sehr gut:
Wie Pascal darauf hingewiesen, EUnit am besten in White-Box-Tests verwendet, eher wie interne Funktion-by-Funktion Unit-Tests, Lichtintegrationstests.
Gemeinsame Test macht das schwerere Heben: Integration & Systemtest, Black-Box Art von Sachen. Es ist natürlich auch komplexer und viel mächtiger.
Während Sie gerade dabei sind, können Sie Dialyzer versuchen, ein weiteres integriertes Test-Tool in Erlang/OTP, das hervorragend in der Lokalisierung von totem oder unerreichbarem Code, logischen Fehlern & (es ist ein statischer Typ Analysator). Erneut, lernen Sie etwas erlang bietet eine nette Einführung dazu: Dialyzer.
Oh, übrigens, wenn Sie die EUnit-Tests in separate Dateien (was durchaus möglich ist) setzen, können Sie nicht-exportierte Funktionen (das ist zu erwarten) nicht testen. Was auch erwartet wird, ist, dass Common Test nichtexportierte Funktionen nicht testet: Sonst wäre es kein Black-Box-Test-Tool (vielleicht ein Betrüger).
Sie können alle Funktionen im Testkontext exportieren, jedoch ist es noch wichtiger, die Unterscheidung in Blackbox Tests zu treffen (keine export_all erlaubt) und White Box Tests (mach was du willst). siehe Bearbeiten. – Pascal
Ich bestätige, dass die Seite Lernen Sie etwas Erlang ist eine der besten für Erlang. – Pascal
Von http://www.erlang.org/doc/apps/common_test/basics_chapter.html:
gemeinsamer Test ist auch ein sehr nützliches Werkzeug für White-Box-Tests Erlang-Code (zB Modultest), da die Testprogramme aufruf können direkt Erlang Funktionen exportieren und es gibt sehr wenig Aufwand erforderlich für die Umsetzung grundlegende Testsuites und Ausführen einfacher Tests. Für Black-Box-Tests können beispielsweise Erlang-Software, Erlang RPC sowie Standard-O & M-Schnittstellen verwendet werden.
- 1. Clojure lassen vs Common Lisp lassen
- 2. Leistungstest - Test: Profil vs Test: Benchmark, Wandzeit vs Prozesszeit
- 3. JavaScript: test vs exec
- 4. Grundeinheitstest vs. Unit Test
- 5. Theorie vs Test Nunit
- 6. Django Test RequestFactory vs Client
- 7. MS VS test runner Ausnahmen
- 8. Common Type System - Strukturen
- 9. Swift und CoreData Casting Probleme im Test vs Nicht-Test
- 10. Rails: rake db: test: Vs Rake Test vorbereiten:
- 11. Warum benötigt Eunit keine Testfunktionen für den Export?
- 12. Erlang EUnit Testmodul, das von einer Bibliotheksanwendung abhängt
- 13. API-Test mit SoapUI vs Postman vs Runscope
- 14. Stub vs Mock wenn Unit-Test
- 15. Karma vs Test-Framework Jasmin, Mokka, QUnit
- 16. BizUnit vs Visual Studio Team Test
- 17. t-Test in r vs Aggregatfunktion
- 18. RobotFramework vs Winkelmesser für AngularJS-Test
- 19. Struct vs test double in Ruby
- 20. Rails RSPEC Controller Test vs Integrationstest
- 21. MR-Unit vs JUnit für Unit-Test
- 22. Listen in Common Lisp transponieren
- 23. Klassenintrospektion in Common Lisp
- 24. Statistikpakete für Common Lisp
- 25. Vereinigung in Common Lisp
- 26. Apache Common Logging deaktivieren
- 27. Common Lisp-Übungen/Probleme
- 28. java.lang.NoClassDefFoundError: kafka/common/TopicAndPartition
- 29. Common Lisp Timer
- 30. Least Common Multiple
danke Pascal. Ich habe mit einigen Erlang-Ingenieuren gesprochen, der einzige Grund, warum ich habe, ist, dass common_test nicht exportierte Funktionen nicht testen kann. – user342673
Dies ist nicht wahr, Sie integrieren Tests in das Quellmodul, so dass Sie testen können, was Sie wollen. –
Ich habe meine Antwort nach Andy Kommentar bearbeitet. Mir ist dieser Weg nicht bekannt, um einen gemeinsamen Test zu verwenden, ich schreibe die Testfälle in test_SUITE.erl Module – Pascal