Testy oparte na danych z jUnit

Czego używasz do pisania testów opartych na danych w jUnit?

(moja definicja) test oparty na danych to test, który odczytuje dane z jakiegoś zewnętrznego źródła (pliku, bazy danych,...), wykonuje jeden test na linię / plik / cokolwiek, i wyświetla wyniki w biegaczu testowym tak, jakbyś miał oddzielne testy - wynik każdego biegu jest wyświetlany osobno, a nie w jednym ogromnym agregacie.

Author: ripper234, 2009-11-30

10 answers

W JUnit4 możesz użyć Parametryzowanego testrunner do wykonywania testów opartych na danych.

Nie jest to zbyt dobrze udokumentowane, ale podstawową ideą jest stworzenie statycznej metody (z adnotacją @Parameters), która zwróci kolekcję tablic obiektów. Każda z tych tablic jest używana jako argument konstruktora klasy test, a następnie można uruchomić zwykłe metody testowe używając pól ustawionych w konstruktorze.

Możesz napisać kod do odczytu i przetworzyć zewnętrzny plik tekstowy w @Parameters method (lub get data from another external source), and then you ' d be able to add new tests by editing this file without recompiling the tests.

 38
Author: matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-22 21:41:48

To tutaj TestNG, z jego @DataSource, świeci. To jeden z powodów, dla których wolę go od JUnit; Pozostałe to zależności i równoległe testy gwintowane.

 9
Author: duffymo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-30 23:30:31

Używam bazy danych w pamięci, takiej jak hsqldb tak, że mogę albo wstępnie wypełnić bazę danych zestawem danych "w stylu produkcyjnym", albo mogę zacząć od pustej bazy danych hsqldb i wypełnić ją wierszami, które muszę wykonać test. Dodatkowo napiszę testy używając JUnit i Mockito .

 8
Author: digiarnie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-30 21:55:58

Używam kombinacji dbUnit, jMock i jUnit 4. Następnie możesz uruchomić ether jako pakiet lub osobno

 4
Author: Bostone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-30 21:27:40

Lepiej rozszerzyć TestCase o "DataDrivenTestCase", który odpowiada twoim potrzebom. Oto przykład pracy: http://mrlalonde.blogspot.ca/2012/08/data-driven-tests-with-junit.html

W przeciwieństwie do testów parametryzowanych, pozwala na ładnie nazwane przypadki testowe.

 3
Author: Mathieu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-24 23:44:32

Jestem z @DroidIn.net, dokładnie to robię, jednak aby odpowiedzieć na twoje pytanie dosłownie "i wyświetlić wyniki w biegaczu testowym tak, jakbyś miał osobne testy", musisz spojrzeć na biegacza Parametryzowanego JUnit4. DBUnit tego nie robi. Jeśli musisz zrobić dużo tego, szczerze mówiąc TestNG jest bardziej elastyczny, ale możesz absolutnie zrobić to w JUnit.

Można również spojrzeć na JUnit teorie runner, ale pamiętam, że nie jest to dobre dla danych napędzanych zbiorów danych, co ma sens, ponieważ JUnit nie polega na pracy z dużą ilością zewnętrznych danych.

 1
Author: Yishai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-30 23:11:42

Mimo, że jest to dość stary temat, nadal myślałem, aby wnieść swój udział. Uważam, że wsparcie JUnit dla testów opartych na danych jest mniej i zbyt nieprzyjazne. dla np. aby użyć parametryzowanego, musimy napisać nasz konstruktor. Z teoriami runner nie mamy kontroli nad zestawem danych testowych, które są przekazywane do metody testowej.

Jest więcej wad zidentyfikowanych w tej serii postów na blogu: http://www.kumaranuj.com/2012/08/junits-parameterized-runner-and-data.html

Istnieje teraz kompleksowe rozwiązanie w postaci EasyTest, który jest frameworkiem a rozszerzonym z JUnit i ma dać wiele funkcjonalności swoim użytkownikom. Jego głównym celem jest przeprowadzanie testów opartych na danych za pomocą JUnit, chociaż nie musisz już polegać na JUnit. Oto projekt github dla refernece: https://github.com/anujgandharv/easytest

Jeśli ktoś jest zainteresowany włożeniem swoich myśli / kodu/sugestii To jest czas. Możesz po prostu przejść do repozytorium github i utworzyć sprawy.

 1
Author: Anuj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-31 08:24:35

Zazwyczaj testy oparte na danych używają małego testowalnego komponentu do obsługi danych. (File reading object, lub mock objects) dla baz danych i zasobów poza aplikacją mocks są używane do porównywania innych systemów. (Usługi internetowe, bazy danych itp.). Zazwyczaj widzę, że istnieją zewnętrzne pliki danych, które obsługują Dane i wyjście. W ten sposób można dodać plik danych do VCS.

 0
Author: monksy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-30 20:55:42

Aktualnie mamy plik rekwizytów z naszymi numerami ID w nim. To jest strasznie kruche, ale łatwo się coś dzieje. Naszym planem jest, aby te numery ID były zastępowane przez właściwości-D w naszych kompilacjach ant.

Nasze środowisko wykorzystuje przestarzały DB z strasznie splecionymi danymi, które nie są ładowane przed uruchomieniem (np. przez dbUnit). W końcu chcielibyśmy dostać się do miejsca, w którym test jednostkowy zapyta DB, aby znaleźć ID z właściwością testowaną, a następnie użyć tego ID w jednostce test. Byłoby to powolne i jest bardziej poprawnie nazywane testowaniem integracji, a nie "testowaniem jednostkowym" , ale testowalibyśmy na rzeczywistych danych, aby uniknąć sytuacji, w której nasza aplikacja działa idealnie na danych testowych, ale nie z prawdziwymi danymi.

 0
Author: Ed Griebel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-30 21:28:15

Niektóre testy nadają się do napędzania interfejsów.

Jeśli odczyty bazy danych / Pliku są pobierane przez wywołanie interfejsu, po prostu pobierz test jednostkowy, aby zaimplementować interfejs, A Klasa testu jednostkowego może zwrócić dowolne dane, które chcesz.

 0
Author: Fortyrunner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-30 22:52:19