[L!der] Test Driven Development in C#, workshop

[L!der] Test Driven Development in C#, workshop

Workshops about unit testing and Test Driven Development in C#
code: https://github.com/mturzynskigoyello/tdd

L!der Workshops Day; Sopot, Poland

Bb0a01a2311e4828a7e6dc721142ce0b?s=128

Michał Michalczuk

November 08, 2017
Tweet

Transcript

  1. TDD Test-Driven Development Mateusz Turzyński, Michał Michalczuk 08.11.2017

  2. Testy? Upewnienie się, że program działa zgodnie z wymaganiami Czym

    jest testowanie oprogramowania?
  3. Testy? I tak wykonujemy testy. Zautomatyzujmy ten process. Uruchom aplikację

    – sprawdź czy działa poprawnie
  4. Testy? • Prostszy kod • Architektura • Luźne powiązania •

    Bezpieczniejsza modyfikacja kodu Na co wpływają testy
  5. Testy Jednostkowe • Tylko jedna klasa • Tylko jedna metoda

    • Tylko unit Izolujemy dokładnie jedną rzecz. Sprawdzamy jedną rzecz
  6. Testy Integracyjne • Interakcja wielu klas • Czy klasy wspólnie

    poprawnie działają Możemy sprawdzić czy całe moduły system działają wspólnie. Sprawdzamy jak rzeczy ze sobą współpracują
  7. Testy Jednostkowe • Tylko jedna klasa • Tylko jedna metoda

    • Tylko unit Izolujemy dokładnie jedną rzecz. Sprawdzamy jedną rzecz
  8. Testy jednostkowe w C# • nUnit • xUnit • MSTest

    • … Wsparcie framworków
  9. • Pierwotnie port z Junit • Wszystkie języki .net •

    Aktualnie: v.3 • Open Source http://nunit.org/ 9
  10. Struktura testu 10 Klasa testowa Metoda testowa (jeden przypadek) Klasa

    testowana. Tworzymy instancję. Wykonaj test Sprawdź wyniki
  11. Struktura testu 11 SetUp Wykona się przed każdym testem Metod

    testowych może być dużo. Po jednej na przypadek.
  12. Setup projektów Jak sprawdzicie działanie tego programu?

  13. 13 Kiedy pisać testy w projekcie

  14. Projekt powstający bez testów

  15. Projekt z testami napisanymi na koniec

  16. Test Driven Development • Testy jako element procesu • Najpierw

    testy • Testy wpływają na architecture • Testy przyśpieszają dalszą pracę Idź za testem
  17. Red Green Refactor Cykl pracy Red Green Refactor Napisz test

    który nie przechodzi. Napisz implementację. Test przechodzi. Refactoring. Poprawiamy.
  18. Co testować? Testuj •Logika •Zmiana stanu •Przepływ danych Nie ma

    sensu •Konstruktory •Kod deklaratywny 18
  19. Dobry test jednostkowy to … • Jeden przypadek • Jedna

    asercja • Dla jednej klasy • Niezależny od innych klas • Niezależny od innych testów Testy mogą wykonywać się w dowolnej kolejności. 19
  20. TDD, pair programming Popracujmy w parach

  21. Tworzymy kod przez kompozycję. Większość naszych klas wykorzystuje inne klasy

    do działania. • Jak je testować? • Czy to dalej testy jednostkowe? 21
  22. To wciąż testy jednostkowe. Dalej testujemy tylko jedną klasę. Oraz

    kontrakty pomiędzy klasami. 22 Jeśli nie użyjemy implementacji klas zależnych
  23. Relacja pomiędzy klasami Baza danych User Service Username Repository Username

    Validator Password Validator
  24. Relacja pomiędzy klasami Zwróćcie uwagę na to że mamy interfejsy.

  25. Stub • Nie chcemy pobierać prawdziwych danych • Nie chcemy

    korzystać z implementacji naszych zależności • Sami „nagrajmy” co mają nam zwracać https://dev.to/milipski/test-doubles---fakes-mocks-and-stubs
  26. Stub User Service Username Repository Stub Username Validator Password Validator

    Not real data
  27. Mock • Czasem wystarczy wytestować czy wykonaliśmy metodę • Np.

    zapis – sprawdź czy został wykonany … lub czy nie został https://dev.to/milipski/test-doubles---fakes-mocks-and-stubs
  28. Mock User Service Username Repository Mock Username Validator Password Validator

  29. Testy jednostkowe w C# • Moq • FakeItEasy • Microsoft

    Fakes • NMock • … Biblioteki do “izolacji” wspierające framworki
  30. Przydadne linki MS Academy: Test-Driven Development https://mva.microsoft.com/en-US/training-courses/testdriven-development-16458 Unit testing frameworks

    in C# compartion https://raygun.com/blog/unit-testing-frameworks-c/ The Art. Of Unit Testing http://artofunittesting.com/ Nasze repozytorium: https://github.com/mturzyn skigoyello/tdd 30
  31. Dziękujemy za uwagę michalczukm michal.michalczuk@goyello.com Mateusz Turzyński mateusz.turzynski@goyello.com Michał Michalczuk

    mturzynskigoyello