Praktyczne wprowadzenie do TDD (Test-Driven Development) w Pythonie | #23
ฝัง
- เผยแพร่เมื่อ 8 ก.พ. 2025
- “10 powodów, dlaczego musisz nauczyć się Pythona w 2020 roku!” ebook.pythonow...
1:33 Opis zadania, wyjaśnienie zasad punktacji w tenisie
3:18 Wprowadzenie do unittest w Pythonie
5:39 Podstawy Test-Driven Development
7:13 Początek implementacji
11:01 Punktacja w tenisie c.d.
12:48 Test zdobycia pierwszych punktów
19:04 Test prowadzący do generycznego kodu punktacji
22:15 Test wymuszający implementację punktacji drugiego gracza
26:21 Pierwszy większy refaktoring
30:44 Nowy test od razu zielony - omówienie zasady "red - green"
34:23 Implementacja kryterium zwycięstwa
36:55 Pierwszy refaktoring testów
39:46 Implementacja brakującej punktacji przy remisie
41:17 Refactoring - ekstrakcja metody zwracającej wynik
42:05 Trik w PyCharmie - edycja wielu linii jednocześnie
44:41 Refaktoring - enkapsulacja ("rename" w PyCharmie)
46:00 Refaktoring - enkapsulacja + dekorator @property
48:25 Implementacja logiki równowagi
51:45 Implementacja logiki przewagi
57:07 Implementacja kryterium zwycięstwa po przewadze
59:49 Ostateczny refaktoring i porządkowanie
1:03:57 Podsumowanie całego kodu
1:05:23 Zakończenie
Dzisiaj zajmuję się tematem testów jednostkowych w praktyce. Na przykładzie Pythona pokazuję, jak stosując metodykę TDD, czyli Test-Driven Development, zaimplementować kod z wymaganą logiką biznesową.
Opis implementowanego zadania: codingdojo.org/...
✉️Dołącz do newslettera:
umniedziala.com...
📷Obserwuj mnie na Insta:
/ umnie.dziala
🔥Dołącz do naszego fanpage’a na Facebooku:
/ umniedzialavlog
🎶Zobacz, jak wygłupiam się na TikToku:
vm.tiktok.com/...
==================================
🌎 Blog “Dziwne, u mnie działa” umniedziala.com/
🐍 Pythonowiec.pl: pythonowiec.pl
🐦 Twitter / sprzedwojski
==================================
All music comes from the TH-cam Audio Library:
www.youtube.co...
Wrzuciłem całą implementację na Githuba, gdyby ktoś chciał sobie zerknąć github.com/sprzedwojski/tdd-tennis-kata
Xtra lekcja . Klarowna i ciekawą. Więcej poproszę o TDD
OMG no to po pół godziny wiem więcej niż po pół dnia kursu. Dziękuję baaaaaardzo.
Dzięki Agnes! ❤️ To może trzeba wnioskować o zwrot kasy za kurs? 😜
@@dziwneumniedziaa1752 to był jeden bardzo słaby trener, który miał z nami Tdd, gita i podstawy Pythona. Na szczęście reszta była ok, ale kurs jest i tak w zawieszeniu przez koronawirusa więc douczam się sama. Dzięki za fajne filmiki i ciekawe artykuły. 👍
Trafiłem na Twój kanał, bo prowadzący na studiach polecił nam ten filmik jako tutorial z TDD.
I jestem bardzo zadowolony z tego co widzę. Profesjonalny dźwięk i edycja. Przeprzyjemnie się to ogląda i słucha.
Przerywniki ze śmiesznymi grafikami bardzo pobudzają mózg jakąś chwilową zmianą kontekstu i odrywają od patrzenia na kod od paru minut.
Muzyka w tle też przyjemnie leci. Zabija ciszę, ale też nie przeszkadza w odbiorze.
A zabawna memiczna muzyka w trakcie "timelapse'a" z pisania kodu aż odpręża 😁
Dobra robota! 👏🏼
Leci sub, dzwoneczek, lajk i gołąb z listem wdzięczności!
Wow, Michał, wielkie dzięki za Twój komentarz! To miód na moje uszy 😊
Starałem się, żeby to wyszło właśnie tak, jak opisujesz. Dlatego mega się cieszę, że się udało 🚀
Powodzenia na studiach i do zobaczenia w kolejnych filmach! 😄💪
Wiele momentów z zagryzaniem zębów w fazie green (gdy przybywa if’ów spełniających jeden jedyny warunek, potrzebny tylko w danej chwili), ale efekt końcowy z pokryciem kodu testami był tego wart. Dzięki!
Dzięki Agata! ❤️ Gratulacje za dotrwanie do końca, bałem się, że nikt może tyle nie wytrzymać! 😉
Jeszcze nie mój poziom, ale na 100% do oglądnięcia w późniejszym czasie!
Dzięki Szymon, dobre wideo. A powiedz mi jak u Ciebie w temacie pytest vs unittest? Co jest Twoim wyborem w większych projektach? Ja używam w zasadzie tylko pytesta, ale to ze względu na to że taki stan zastałem w pierwszym projekcie i tak się trzymam ;)
Pytest daje sporo więcej możliwości, m.in. fixtures. W większych projektach też używam pytesta, jest to chyba najczęściej stosowane narzędzie do testów w Pythonie.
Ale zdecydowałem się tu użyć unittest przede wszystkim dlatego, że jest wbudowany w Pythona i nie trzeba niczego instalować. A na początek unittest w zupełności wystarcza :)
fajen
Dobra robota :) Już od dłuższego czasu poszukiwałem jakiegoś fajnego przykładu z zastosowania TDD niż tylko sucha teoria :) Hmm, a co powiesz na to aby dodać testy które sprawdzały by niepoprawne wyniki np. (0 - 5) albo (-1 - 10). Drugie pytanie - czy powinniśmy zmieniać nazwy testów tylko w fazie refactor?
Hej Radek, dzięki za miłe słowa 😀 Co do testowania niepoprawnych wyników: jeśli chodzi np. o wynik 0-5 to chyba nawet mówiłem w filmie, że ja zastosowałem pewne uproszczenie, ale tak, powinniśmy coś takiego testować jeśli system miałby być "produkcyjny". Bo można wywołać 5 razy metodę player_two_scored() i faktycznie otrzymamy taki wynik, a nie powinien on mieć miejsca - gra powinna się zakończyć na 0-4.
Jeśli chodzi natomiast o wynik -1 - 10 to tutaj już nie jestem taki pewien. Bez "hacków" nie da sie ustawić wyniku gracza na -1. Szczególnie po tym, jak dodaliśmy @property na score i zmienne z wynikami poszczególnych graczy są "ukryte" poprzez zastosowanie konwencji ze znakiem podłogi ("_") na początku nazw. Czyli zasadniczo taka sytuacja nie powinna wystąpić w trakcie normalnego użytkowania naszego kodu, i próba zabezpieczenia się przed -1 mogłaby już trochę podchodzić pod nadmiernie defensywne programowanie. Podsumowując: ja bym tego już nie testował.
Co do drugiego pytania: myślę, że tak. Jest to zmiana z kategorii tych refaktoryzujących. Szczególnie, że mógłbyś np. przypadkiem tak zmienić nazwę testu, że przestałaby zaczynać się od "testXYZ", bo np. wkradłaby się literówka: "tstXYZ". No i wtedy unittest przestałby odpalać ten test. Dlatego najlepiej robić to w fazie refaktor, bo wtedy najszybciej zauważysz, że test się nie odpala, choć powinien.
3m się, pozdrawiam! 😉
Nie wiem czemu, ale u mnie wymagana była metoda main:
if __name__=="main":
unittest.main()
Dopiero wtedy zaczęły się testy uruchamiać(oczywiście o zabawie z indentacją nie wspomnę)
Pozdrawiam tych co mieli podobną przygodę
Ja odpalałem testy z IDE, dlatego pewnie nie musiałem robić takich rzeczy. A o indentację też się dzięki temu nie martwię - autoformatowanie :)
Zajebiste.
Myślisz na przykład o TDD i Mockach na przykładzie na przykład Flaska?