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...

ความคิดเห็น • 18

  • @dziwneumniedziaa1752
    @dziwneumniedziaa1752  4 ปีที่แล้ว +2

    Wrzuciłem całą implementację na Githuba, gdyby ktoś chciał sobie zerknąć github.com/sprzedwojski/tdd-tennis-kata

  • @paweljasnowski
    @paweljasnowski 2 ปีที่แล้ว

    Xtra lekcja . Klarowna i ciekawą. Więcej poproszę o TDD

  • @AgaGrusz
    @AgaGrusz 4 ปีที่แล้ว +2

    OMG no to po pół godziny wiem więcej niż po pół dnia kursu. Dziękuję baaaaaardzo.

    • @dziwneumniedziaa1752
      @dziwneumniedziaa1752  4 ปีที่แล้ว

      Dzięki Agnes! ❤️ To może trzeba wnioskować o zwrot kasy za kurs? 😜

    • @AgaGrusz
      @AgaGrusz 4 ปีที่แล้ว +1

      @@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. 👍

  • @michalkmiecik
    @michalkmiecik 4 ปีที่แล้ว

    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!

    • @dziwneumniedziaa1752
      @dziwneumniedziaa1752  4 ปีที่แล้ว +1

      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! 😄💪

  • @AgataJezewska
    @AgataJezewska 4 ปีที่แล้ว +1

    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!

    • @dziwneumniedziaa1752
      @dziwneumniedziaa1752  4 ปีที่แล้ว

      Dzięki Agata! ❤️ Gratulacje za dotrwanie do końca, bałem się, że nikt może tyle nie wytrzymać! 😉

  • @danielslusarz1
    @danielslusarz1 4 ปีที่แล้ว +1

    Jeszcze nie mój poziom, ale na 100% do oglądnięcia w późniejszym czasie!

  • @konr1x
    @konr1x 4 ปีที่แล้ว +2

    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 ;)

    • @dziwneumniedziaa1752
      @dziwneumniedziaa1752  4 ปีที่แล้ว +2

      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 :)

  • @etajutubczanel2656
    @etajutubczanel2656 3 ปีที่แล้ว

    fajen

  • @rahh000
    @rahh000 4 ปีที่แล้ว

    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?

    • @dziwneumniedziaa1752
      @dziwneumniedziaa1752  4 ปีที่แล้ว +1

      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! 😉

  • @attilluss
    @attilluss 3 ปีที่แล้ว

    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ę

    • @dziwneumniedziaa1752
      @dziwneumniedziaa1752  3 ปีที่แล้ว

      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 :)

  • @ineedsolution
    @ineedsolution 4 ปีที่แล้ว

    Zajebiste.
    Myślisz na przykład o TDD i Mockach na przykładzie na przykład Flaska?