Czym jest testowanie jednostkowe?

Widziałem wiele pytań pytających " jak "test jednostkowy w określonym języku, ale nie pytałem "co", "dlaczego" i "kiedy".

    Co to jest? Co to dla mnie robi?
  • dlaczego powinienem go używać?
  • Kiedy powinienem go używać (również wtedy, gdy nie)?
  • Jakie są typowe pułapki i nieporozumienia
Author: Peter Mortensen, 2008-08-04

20 answers

Unit testing to, z grubsza rzecz biorąc, testowanie bitów Twojego kodu w izolacji z kodem testowym. Natychmiastowe zalety, które przychodzą na myśl to:

  • Uruchamianie testów staje się zautomatyzowane i powtarzalne
  • możesz testować na znacznie bardziej szczegółowym poziomie niż testowanie point-and-click za pomocą GUI

Zauważ, że jeśli twój kod testowy zapisze się do pliku, otworzy połączenie z bazą danych lub zrobi coś przez sieć, zostanie on odpowiednio skategoryzowany jako test integracji. Testy integracyjne są dobrą rzeczą, ale nie należy ich mylić z testami jednostkowymi. Kod testu jednostkowego powinien być krótki, słodki i szybki do wykonania.

Innym sposobem spojrzenia na testy jednostkowe jest to, że najpierw piszesz testy. Jest to znane jako Test-Driven Development (w skrócie TDD). TDD przynosi dodatkowe korzyści:

  • nie piszesz spekulatywnego kodu "może mi się to przydać w przyszłości" -- wystarczy, aby testy przeszły
  • kod, który napisałeś, jest zawsze objęty testy
  • pisząc pierwszy test, jesteś zmuszony do myślenia o tym, jak chcesz nazwać Kod, co zwykle poprawia wygląd kodu na dłuższą metę.

Jeśli nie robisz teraz testów jednostkowych, polecam zacząć. Zdobądź dobrą książkę, praktycznie każdy xUnit-book zrobi, ponieważ pojęcia są bardzo przenoszalne między nimi.

Czasami pisanie testów jednostkowych może być bolesne. Kiedy tak się stanie, spróbuj znaleźć kogoś, kto ci pomoże i oprzeć się pokusa, by "po prostu napisać cholerny kod". Testy jednostkowe są podobne do mycia naczyń. Nie zawsze jest to przyjemne, ale utrzymuje metaforyczną kuchnię w czystości i naprawdę chcesz, aby była czysta. :)


Edit: przychodzi mi na myśl jedno błędne przekonanie, chociaż nie jestem pewien, czy jest tak powszechne. Słyszałem, jak kierownik projektu mówił, że testy jednostkowe zmusiły zespół do napisania całego kodu dwa razy. Jeśli tak to wygląda i czuje, to źle to robisz. Nie tylko pisanie testów zwykle przyspiesza w górę rozwoju, ale daje również wygodny wskaźnik "teraz skończyłem", którego w przeciwnym razie nie miałbyś.

 186
Author: Rytmis,
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
2015-03-15 06:35:20

Nie zgadzam się z Danem (chociaż lepszym wyborem może być po prostu brak odpowiedzi)...ale...

Testowanie jednostkowe to proces pisania kodu w celu sprawdzenia zachowania i funkcjonalności systemu.

Oczywiście testy poprawiają jakość kodu, ale to tylko powierzchowna zaleta testów jednostkowych. Realne korzyści to:

  1. Ułatw zmianę implementacji technicznej, upewniając się, że nie zmienisz zachowania (refaktoryzacja). Jednostka właściwa testowany kod może być agresywnie refakturowany/oczyszczony z niewielką szansą na złamanie czegokolwiek bez zauważenia go.
  2. Zapewnij deweloperom pewność podczas dodawania zachowań lub wprowadzania poprawek.
  3. dokumentuj swój kod
  4. wskaż obszary kodu, które są ze sobą ściśle powiązane. Trudno jest przetestować kod, który jest ściśle powiązany
  5. Zapewnij sposób korzystania z API i Szukaj trudności na początku
  6. wskazuje metody i klasy, które nie są zbyt spójne

Ty powinien test jednostkowy, ponieważ w Twoim interesie jest dostarczenie klientowi łatwego do utrzymania i wysokiej jakości produktu.

Sugerowałbym użycie go dla każdego systemu, lub części systemu, który modeluje zachowania w świecie rzeczywistym. Innymi słowy, szczególnie dobrze nadaje się do rozwoju przedsiębiorstw. Nie używałbym go do wyrzucania / programów użytkowych. Nie używałbym go dla części systemu, które są problematyczne do testowania (UI jest częstym przykładem, ale nie zawsze tak jest)

Największa pułapka czy Programiści testują zbyt dużą jednostkę, czy uważają metodę za jednostkę. Jest to szczególnie prawdziwe, jeśli nie rozumiesz inwersji sterowania - W takim przypadku twoje testy jednostkowe zawsze zamienią się w kompleksowe testy integracyjne. Test jednostkowy powinien testować indywidualne zachowania - a większość metod ma wiele zachowań.

Największym błędem jest to, że programiści nie powinni testować. Tylko źli lub leniwi Programiści w to wierzą. Czy facet budujący twój dach nie powinien tego testować? Powinien lekarz wymieniający zastawkę serca nie testuje nowej zastawki? Tylko programista może sprawdzić, czy jego kod robi to, co zamierzał (QA może testować przypadki brzegowe-jak kod zachowuje się, gdy ma robić rzeczy, których programista nie zamierzał, a Klient może testować akceptację - czy kod robi to, za co klient zapłacił)

 66
Author: Karl Seguin,
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
2016-10-29 15:51:31

Główna różnica w testowaniu jednostkowym, w przeciwieństwie do "otwierania nowego projektu i testowania tego konkretnego kodu" polega na tym, że jest on zautomatyzowany, a więc powtarzalny.

Jeśli przetestujesz swój kod ręcznie, może cię to przekonać, że kod działa idealnie - w obecnym stanie . Ale co z tydzień później, kiedy dokonałeś w nim drobnej modyfikacji? Czy chcesz ponownie przetestować go ręcznie za każdym razem, gdy cokolwiek zmieni się w Twoim kodzie? Najprawdopodobniej nie :-(

Ale jeśli możesz uruchomić testy w dowolnym momencie, za pomocą jednego kliknięcia, dokładnie w ten sam sposób, w ciągu kilku sekund, wtedy pokażą ci natychmiast, gdy coś jest zepsute. Jeśli włączysz również testy jednostkowe do zautomatyzowanego procesu budowania, będą one ostrzegać o błędach nawet w przypadkach, gdy pozornie zupełnie niepowiązana zmiana złamała coś w odległej części kodu - kiedy nawet nie przyszło ci do głowy, że istnieje potrzeba ponownego przetestowania tego błędu szczególna funkcjonalność.

Jest to główna zaleta testów jednostkowych nad testami ręcznymi. Ale czekaj, jest więcej:

  • testy jednostkowe skróć pętlę sprzężenia zwrotnego dramatycznie: w przypadku oddzielnego działu testowego może to potrwać tygodnie, zanim dowiesz się, że w Twoim kodzie jest błąd, do którego czasu już zapomniałeś dużo kontekstu, więc znalezienie i naprawienie błędu może zająć Ci godziny; OTOH z testami jednostkowymi cykl sprzężenia zwrotnego jest mierzony w sekundach, proces naprawiania błędów jest zazwyczaj podobny do "oh sh*t, zapomniałem sprawdzić ten warunek tutaj": -) {]}
  • testy jednostkowe skutecznie dokument (Twoje zrozumienie) zachowania kodu
  • Testy jednostkowe zmuszają cię do ponownej oceny swoich wyborów projektowych, co skutkuje prostszym i czystszym projektem]}

Unit testing framework z kolei ułatwia pisanie i uruchamianie testów.

 41
Author: Péter Török,
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
2010-03-14 17:41:59

Nigdy nie uczono mnie testów jednostkowych na uniwersytecie, i zajęło mi trochę czasu, aby je "zdobyć". Przeczytałem o tym, poszedłem "ach, racja, zautomatyzowane testy, to może być fajne, tak myślę", a potem zapomniałem o tym.

Zajęło mi trochę więcej czasu, zanim naprawdę zorientowałem się o co chodzi: powiedzmy, że pracujesz nad dużym systemem i piszesz mały moduł. Kompiluje się, poddajesz go działaniu, działa świetnie, przechodzisz do następnego zadania. Dziewięć miesięcy w dół linii i dwie wersje później ktoś else dokonuje zmiany na jakąś pozornie niezwiązaną z programem część i rozbija moduł. Co gorsza, testują swoje zmiany i ich kod działa, ale nie testują twojego modułu; do diabła, mogą nawet nie wiedzieć, że Twój Moduł istnieje .

I teraz masz problem: zepsuty kod jest w bagażniku i nikt nawet nie wie. Najlepszy przypadek to wewnętrzny tester znajdzie go przed wysyłką, ale naprawienie kodu tak późno w grze jest kosztowne. A jeśli żaden Tester wewnętrzny nie znajdzie to...to może być bardzo drogie.

Rozwiązaniem są testy jednostkowe. Będą łapać problemy podczas pisania kodu - co jest w porządku - ale mogłeś zrobić to ręcznie. Prawdziwa wypłata polega na tym, że będą łapać problemy dziewięć miesięcy w dół linii, kiedy pracujesz teraz nad zupełnie innym projektem, ale letni stażysta myśli, że będzie wyglądać schludniej, jeśli te parametry będą w porządku alfabetycznym - a potem test jednostkowy, który napisałeś nie powiedzie się, a ktoś rzuca rzeczy na stażysta, dopóki nie zmieni kolejności parametrów. to "dlaczego" testów jednostkowych. :-)

 31
Author: Cody Hatch,
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
2011-10-22 16:34:35

Zgrywanie filozoficznych plusów testowania jednostkowego i TDD oto kilka z nich kluczowych obserwacji "żarówek", które uderzyły mnie na moich wstępnych pierwszych krokach na drodze do oświecenia TDD (brak oryginalnych lub koniecznie wiadomości)...

  1. TDD nie oznacza napisania dwukrotnie większej ilości kodu. Kod testowy jest zazwyczaj dość szybki i bezbolesny do napisania i jest kluczową częścią procesu projektowania i krytycznie.

  2. TDD pomaga uświadomić sobie, kiedy przestać kodować! Twój testy dają Ci pewność, że zrobiłeś już wystarczająco dużo i możesz przestać poprawiać i przejść do następnej rzeczy.

  3. Testy i Kod współpracują ze sobą, aby uzyskać lepszy kod. Twój kod może być zły / błędny. Twój TEST może być zły / buggy. W TDD stawiasz na szanse, że zarówno złe , jak i wadliwe będą dość niskie. Często jest to test, który wymaga naprawy, ale to nadal dobry wynik.

  4. TDD pomaga w kodowaniu zaparć. Znasz to uczucie, że ty masz tyle do zrobienia, że ledwo wiesz, od czego zacząć? Jest Piątkowe popołudnie, jeśli zwlekasz jeszcze przez kilka godzin... TDD pozwala bardzo szybko wymodelować to, co myślisz, że musisz zrobić, i szybko przyspiesza kodowanie. Również, jak szczury laboratoryjne, myślę, że wszyscy reagujemy na to wielkie zielone światło i pracujemy ciężej, aby zobaczyć je ponownie!

  5. W podobnym duchu ci projektanci mogą zobaczyć, nad czym pracują. Mogą odpłynąć na przerwę na sok / papierosa / iphone ' a i wróć do monitora, który natychmiast daje im wizualny sygnał, gdzie dotarli. TDD daje nam coś podobnego. Łatwiej jest zobaczyć, do czego doszliśmy, gdy życie interweniuje...

  6. Myślę, że to Fowler powiedział: "niedoskonałe testy, często wykonywane, są o wiele lepsze niż doskonałe testy, które nigdy nie są napisane". Interpretuję to jako pozwolenie na pisanie testów, gdzie myślę, że będą najbardziej przydatne, nawet jeśli reszta mojego kodu jest żałośnie niekompletne.

  7. TDD pomaga na różne zaskakujące sposoby. Dobre testy jednostkowe mogą pomóc w udokumentowaniu tego, co coś ma robić, mogą pomóc w migracji kodu z jednego projektu do drugiego i dać nieuzasadnione poczucie wyższości nad kolegami, którzy nie testują :)

Ta prezentacja {34] } jest doskonałym wprowadzeniem do wszystkich pysznych testów dobroci pociąga za sobą.

 13
Author: reefnet_alex,
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
2014-01-30 19:41:39

Chciałbym polecić książkę xUnit Testing Patterns autorstwa Gerarda Meszarosa. Jest duży, ale jest świetnym źródłem testów jednostkowych. Oto link do jego strony internetowej, gdzie omawia podstawy testów jednostkowych. http://xunitpatterns.com/XUnitBasics.html

 7
Author: Paul Hildebrandt,
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
2010-03-14 18:10:04

To moje zdanie na ten temat. Powiedziałbym, że testowanie jednostkowe jest praktyką pisania testów oprogramowania w celu sprawdzenia, czy twoje prawdziwe oprogramowanie robi to, do czego jest przeznaczone. To zaczęło się od jUnit w świecie Javy I stało się najlepszą praktyką w PHP, a także z SimpleTest i phpUnit . Jest to podstawowa praktyka programowania ekstremalnego i pomaga upewnić się, że oprogramowanie nadal działa zgodnie z przeznaczeniem po edycji. Jeśli masz wystarczające pokrycie testowe, możesz wykonać poważną refaktoryzację, naprawianie błędów lub dodawanie funkcji szybko ze znacznie mniejszą obawą przed wprowadzeniem innych problemów.

Jest to najskuteczniejsze, gdy wszystkie testy jednostkowe mogą być uruchamiane automatycznie.

Testy jednostkowe są na ogół związane z rozwojem OO. Podstawową ideą jest stworzenie skryptu, który skonfiguruje środowisko dla Twojego kodu, a następnie go ćwiczy; piszesz twierdzenia, określasz zamierzony wynik, który powinieneś otrzymać, a następnie wykonujesz skrypt testowy za pomocą frameworka, takiego jak wspomniane powyżej.

Framework uruchomi wszystkie testy z Twoim kodem, a następnie zgłosi sukces lub porażkę każdego testu. phpUnit jest domyślnie uruchamiany z linii poleceń Linuksa, chociaż dostępne są dla niego interfejsy HTTP. SimpleTest jest z natury oparty na sieci i jest znacznie łatwiejszy do uruchomienia i uruchomienia, IMO. W połączeniu z xDebug, phpUnit może dać ci zautomatyzowane statystyki dotyczące zasięgu kodu, które niektórzy uważają za bardzo przydatne.

Niektóre zespoły piszą Hooki ze swojej subversion repozytorium, aby testy jednostkowe były uruchamiane automatycznie przy każdym zatwierdzaniu zmian.

Dobrą praktyką jest trzymanie testów jednostkowych w tym samym repozytorium co aplikacja.

 5
Author: Polsonby,
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
2008-08-04 23:53:16

Używam testów jednostkowych, aby zaoszczędzić czas.

Podczas budowania logiki biznesowej (lub dostępu do danych) funkcje testowania mogą często obejmować wpisywanie rzeczy na wielu ekranach, które mogą, ale nie muszą być jeszcze zakończone. Automatyzacja tych testów oszczędza czas.

Dla mnie testy jednostkowe są rodzajem modularnej uprzęży testowej. Zazwyczaj na jedną funkcję publiczną przypada co najmniej jeden test. Piszę dodatkowe testy obejmujące różne zachowania.

Wszystkie szczególne przypadki, o których pomyślałeś podczas opracowywania kod można zapisać w kodzie w testach jednostkowych. Testy jednostkowe stają się również źródłem przykładów użycia kodu.

Jest o wiele szybciej dla mnie, aby odkryć, że mój nowy kod łamie coś w moich testach jednostkowych, a następnie sprawdzić w kodzie i mieć jakiś front-end developer znaleźć problem.

Do testów dostępu do danych staram się pisać testy, które albo nie mają zmian, albo po sobie posprzątają.

Testy jednostkowe nie rozwiążą wszystkich testów wymagania. Będą mogli zaoszczędzić czas rozwoju i przetestować podstawowe części aplikacji.

 5
Author: Leah,
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
2008-09-17 00:38:12

Biblioteki jak NUnit, xUnit lub JUnit są obowiązkowe, jeśli chcesz rozwijać swoje projekty przy użyciu podejścia TDD spopularyzowanego przez Kenta Becka:

Możesz przeczytać Wprowadzenie do Test Driven Development (TDD) lub książka Kenta Becka Test Driven Development: na przykładzie.

Następnie, jeśli chcesz mieć pewność, że testy obejmują "dobrą" część kodu, możesz użyć oprogramowania takiego jak NCover , JCover, PartCover czy jakoś tak. Powiedzą Ci procent pokrycia Twojego kodu. W zależności od tego, jak bardzo jesteś biegły w TDD, będziesz wiedział, czy ćwiczyłeś wystarczająco dobrze:)]}

 4
Author: PierrOz,
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
2011-10-22 16:41:38

Testowanie jednostkowe polega na pisaniu kodu, który testuje Kod Twojej aplikacji.

Jednostka część nazwy dotyczy zamiaru testowania małych jednostek kodu (na przykład jednej metody) naraz.

XUnit jest po to, aby pomóc w tych testach - są to frameworki, które pomagają w tym. Częścią tego są zautomatyzowane biegacze testowe, które mówią ci, który test się nie powiedzie, a który zda.

Mają również możliwości konfiguracji wspólnego kodu, którego potrzebujesz w każdym teście przed ręką i zburzyć go, gdy wszystkie testy się skończą.

Możesz mieć test sprawdzający, czy oczekiwany wyjątek został wyrzucony, bez konieczności samodzielnego pisania całego bloku try catch.

 3
Author: Oded,
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
2010-03-14 17:19:07

Myślę, że nie rozumiesz, że frameworki testów jednostkowych, takie jak NUnit (i tym podobne), pomogą Ci w automatyzacji testów małych i średnich. Zazwyczaj można uruchomić testy w GUI (tak jest na przykład z NUnit), klikając przycisk, a następnie-miejmy nadzieję-zobaczyć pasek postępu pozostanie zielony. Jeśli zmieni kolor na czerwony, framework pokazuje, który test się nie powiódł, a co dokładnie poszło nie tak. W normalnym teście jednostkowym często używa się twierdzeń, np. Assert.AreEqual(expectedValue, actualValue, "some description") - więc jeśli obie wartości są nierówne, zobaczysz błąd " some description: expected but was ".

Podsumowując, testy jednostkowe sprawią, że testy będą szybsze i o wiele wygodniejsze dla programistów. Możesz uruchomić wszystkie testy jednostkowe przed zatwierdzeniem nowego kodu, aby nie przerwać procesu budowania innych programistów w tym samym projekcie.

 3
Author: AndiDog,
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
2010-03-14 17:25:49

Użyj Testivus . Wszystko, co musisz wiedzieć, jest właśnie tutaj:)

 3
Author: MetroidFan2002,
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
2011-10-22 16:30:40

Testowanie jednostkowe jest praktyką, aby upewnić się, że funkcja lub moduł, który zamierzasz zaimplementować, będzie zachowywać się zgodnie z oczekiwaniami (wymagania), a także aby upewnić się, jak zachowuje się w scenariuszach takich jak warunki brzegowe i nieprawidłowe dane wejściowe.

XUnit, NUnit, mbUnit , itd. są narzędziami, które pomogą Ci w pisaniu testów.

 3
Author: Rony,
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
2011-10-22 16:37:24

Unit-testing to testowanie jednostki kodu (np. pojedynczej funkcji) bez potrzeby korzystania z infrastruktury, na której opiera się Ta jednostka kodu. tj. przetestować go w izolacji.

Jeśli na przykład testowana funkcja łączy się z bazą danych i dokonuje aktualizacji, w teście jednostkowym możesz nie chcieć tej aktualizacji. Zrobiłbyś to, gdyby był to test integracyjny, ale w tym przypadku nie jest.

Więc test jednostkowy wykonywałby funkcjonalność zamkniętą w "funkcji", którą jesteś testowanie bez skutków ubocznych aktualizacji bazy danych.

Powiedz, że twoja funkcja pobrała niektóre liczby z bazy danych, a następnie wykonała obliczenia odchylenia standardowego. Co próbujesz sprawdzić? Czy odchylenie standardowe jest obliczane prawidłowo czy dane są zwracane z bazy danych?

W teście jednostkowym chcesz sprawdzić, czy odchylenie standardowe jest obliczane poprawnie. W teście integracyjnym chcesz przetestować obliczenia odchylenia standardowego i odzyskiwanie bazy danych.

 2
Author: Guy,
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
2008-08-15 17:42:54

Test Driven Development przejął w pewnym sensie termin test jednostkowy. Jako stary timer wspomnę o bardziej ogólnej definicji tego.

Test jednostkowy oznacza również testowanie pojedynczego komponentu w większym systemie. Ten pojedynczy komponent może być biblioteką dll, exe, klas itp. Może to być nawet pojedynczy system w aplikacji wielosystemowej. Tak więc ostatecznie test jednostkowy kończy się testowaniem czegokolwiek, co chcesz nazwać pojedynczym kawałkiem większego systemu.

Wtedy ruszyłbyś w górę do testów zintegrowanych lub systemowych, testując, jak wszystkie komponenty współpracują ze sobą.

 2
Author: bruceatk,
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
2008-08-24 22:34:33

Po pierwsze, czy mówimy o testach jednostkowych, czy o innych rodzajach testów automatycznych (Integracja, Ładowanie, testowanie interfejsu użytkownika itp.), kluczową różnicą od tego, co sugerujesz, jest to, że jest zautomatyzowany, powtarzalny i nie wymaga wykorzystania zasobów ludzkich (=nikt nie musi przeprowadzać testów, zwykle uruchamiane są za naciśnięciem przycisku).

 2
Author: Tomas Vana,
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
2010-03-14 17:22:23

Poszedłem na prezentację na temat testów jednostkowych na FoxForward 2007 i powiedziano mi, aby nigdy nie testować jednostkowo niczego, co działa z danymi. W końcu, jeśli testujesz dane na żywo, wyniki są nieprzewidywalne, a jeśli nie testujesz danych na żywo, nie testujesz napisanego kodu. Niestety, to większość kodowania, które robię w dzisiejszych czasach. :-)

Zrobiłem strzał w TDD ostatnio, gdy pisałem rutynę, aby zapisać i przywrócić ustawienia. Najpierw sprawdziłam, czy mogę stworzyć pamięć masową obiekt. Potem, że ma metodę, którą musiałem zadzwonić. Wtedy mogę to nazwać. Wtedy, że mogę przekazać to parametry. Wtedy, że mogę przekazać mu określone parametry. I tak dalej, dopóki w końcu nie sprawdzałem, czy zapisuje określone ustawienie, pozwala mi je zmienić, a następnie przywrócić, dla kilku różnych składni.

Nie doszedłem do końca, bo potrzebowałem-rutyny-teraz-cholera, ale to było dobre ćwiczenie.

 1
Author: SarekOfVulcan,
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
2008-08-22 18:10:23

Co zrobić, jeśli dostajesz kupę gówna i wydaje się, że utknąłeś w Wiecznym stanie czyszczenia, że wiesz, że dodanie jakiejkolwiek nowej funkcji lub kodu może złamać bieżący zestaw, ponieważ obecne oprogramowanie jest jak domek z kart?

Jak możemy przeprowadzić testy jednostkowe?

Zaczynasz od małego. Projekt, w który właśnie się zaangażowałem, nie miał żadnych testów jednostkowych, aż do kilku miesięcy temu. Gdy zasięg był tak niski, po prostu wybieraliśmy plik, który nie miał zasięgu i kliknij "Dodaj testy". W tej chwili mamy ponad 40% i udało nam się zebrać większość nisko wiszących owoców.

(najlepsze jest to, że nawet przy tak niskim poziomie zasięgu, mamy już do czynienia z wieloma instancjami kodu robiącymi złe rzeczy, a testy to wykryły. To ogromna motywacja, aby zachęcić ludzi do dodawania kolejnych testów.)

 1
Author: Adam V,
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
2008-08-22 18:19:39

To odpowiedź, dlaczego powinieneś robić testy jednostkowe.


Poniższe 3 Filmy dotyczą testów jednostkowych w javascript, ale ogólne zasady obowiązują w większości języków.

Testy jednostkowe: minuty teraz zaoszczędzą godziny później-Eric Mann- https://www.youtube.com/watch?v=_UmmaPe8Bzc

Js Unit Testing (very good) - https://www.youtube.com/watch?v=-IYqgx8JxlU

Pisanie Testowalnego JavaScript - https://www.youtube.com/watch?v=OzjogCFO4Zo


Teraz dopiero uczę się na ten temat, więc może nie jestem w 100% poprawny i jest w tym więcej niż to, co opisuję tutaj, ale moje podstawowe zrozumienie testowania jednostkowego jest to, że piszesz jakiś kod testowy (który jest trzymany oddzielnie od głównego kodu), który wywołuje funkcję w głównym kodzie z wejściami (argumentami), które funkcja wymaga, A kod następnie sprawdza, czy odzyskuje prawidłową wartość zwracaną. Jeśli to się z powrotem ważne wartość struktura testów jednostkowych, której używasz do uruchamiania testów, pokazuje zielone światło (wszystko dobrze) jeśli wartość jest nieprawidłowa, dostajesz czerwone światło i możesz rozwiązać problem od razu przed wydaniem nowego kodu do produkcji, bez testowania możesz w rzeczywistości nie złapać błędu.

Więc piszesz testy dla bieżącego kodu i tworzysz kod tak, aby przeszedł test. Miesiące później Ty lub ktoś inny musisz zmodyfikować funkcję w swoim kodzie głównym, ponieważ wcześniej jeśli już napisałeś kod testowy dla tej funkcji, Teraz uruchom ponownie i test może się nie udać, ponieważ koder wprowadził błąd logiczny w funkcji lub zwróci coś zupełnie innego niż to, co ta funkcja ma zwrócić. Ponownie bez testu ten błąd może być trudny do wyśledzenia, ponieważ może wpływać również na inny kod i pozostanie niezauważony.


Również fakt, że masz program komputerowy, który uruchamia Twój kod i testuje go zamiast Ciebie ręczne robienie tego w przeglądarce strona po stronie oszczędza czas (testowanie jednostkowe dla javascript). Załóżmy, że modyfikujesz funkcję, która jest używana przez jakiś skrypt na stronie internetowej i działa dobrze i dobrze zgodnie z jej nowym przeznaczeniem. Ale, powiedzmy również dla argumentów, że istnieje inna funkcja, którą masz gdzieś indziej w kodzie, która zależy od tej nowo zmodyfikowanej funkcji, aby działała poprawnie. Ta zależna funkcja może teraz przestać działać z powodu zmian, które zostały wprowadzone do pierwsza funkcja, jednak bez testów w miejscu, które są uruchamiane automatycznie przez komputer nie zauważysz, że istnieje problem z tą funkcją, dopóki nie zostanie ona faktycznie wykonana i będziesz musiał ręcznie przejść do strony internetowej, która zawiera skrypt, który wykonuje zależną funkcję, dopiero wtedy zauważysz, że jest błąd z powodu zmiany, którą zrobiłeś do pierwszej funkcji.

Dla przypomnienia, testy, które są uruchamiane podczas tworzenia aplikacji będzie złapać tego rodzaju problemy podczas kodowania. Nie mając testów na miejscu musiałbyś ręcznie przejść przez całą swoją aplikację i nawet wtedy może być trudno zauważyć błąd, naiwnie wysyłasz go do produkcji i po chwili miły użytkownik wysyła Ci raport o błędzie (który nie będzie tak dobry, jak komunikaty o błędach w ramach testowania).


To dość mylące, kiedy pierwszy raz słyszysz temat i myślisz sobie, czy nie testuję już mojego kodu? I kod, który masz napisane działa tak jak powinno już być: "po co mi inny framework?"... Tak, już testujesz swój kod, ale komputer jest w tym lepszy. Wystarczy napisać wystarczająco dobre testy dla funkcji / jednostki kodu raz, a reszta jest pod opieką dla ciebie przez potężny PROCESOR, zamiast ręcznie sprawdzać, czy cały kod nadal działa, gdy dokonujesz zmiany w kodzie.

Ponadto, nie musisz testować kodu, jeśli nie chcesz, ale to opłaca się, gdy baza projektów / kodu zaczyna się powiększać wraz ze wzrostem szans na wprowadzenie błędów.

 1
Author: Stephen Brown,
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
2015-07-21 12:00:13

Unit-testing i TDD w ogóle pozwala na krótsze cykle sprzężenia zwrotnego na temat oprogramowania, które piszesz. Zamiast mieć dużą fazę testową na samym końcu implementacji, stopniowo testujesz wszystko, co piszesz. To bardzo podnosi jakość kodu, jak od razu widać, gdzie możesz mieć błędy.

 0
Author: aap,
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
2017-05-03 09:33:16