Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[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

Michał Michalczuk

November 08, 2017
Tweet

More Decks by Michał Michalczuk

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

  3. Testy?
    I tak wykonujemy testy.
    Zautomatyzujmy ten
    process.
    Uruchom aplikację – sprawdź czy działa poprawnie

    View Slide

  4. Testy?
    • Prostszy kod
    • Architektura
    • Luźne powiązania
    • Bezpieczniejsza
    modyfikacja kodu
    Na co wpływają testy

    View Slide

  5. Testy Jednostkowe
    • Tylko jedna klasa
    • Tylko jedna metoda
    • Tylko unit
    Izolujemy dokładnie
    jedną rzecz.
    Sprawdzamy jedną rzecz

    View Slide

  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ą

    View Slide

  7. Testy Jednostkowe
    • Tylko jedna klasa
    • Tylko jedna metoda
    • Tylko unit
    Izolujemy dokładnie
    jedną rzecz.
    Sprawdzamy jedną rzecz

    View Slide

  8. Testy jednostkowe w C#
    • nUnit
    • xUnit
    • MSTest
    • …
    Wsparcie framworków

    View Slide

  9. • Pierwotnie port
    z Junit
    • Wszystkie języki .net
    • Aktualnie: v.3
    • Open Source
    http://nunit.org/
    9

    View Slide

  10. Struktura testu
    10
    Klasa testowa
    Metoda testowa
    (jeden przypadek)
    Klasa testowana.
    Tworzymy instancję.
    Wykonaj test
    Sprawdź wyniki

    View Slide

  11. Struktura testu
    11
    SetUp
    Wykona się przed każdym testem
    Metod testowych może
    być dużo.
    Po jednej na przypadek.

    View Slide

  12. Setup projektów
    Jak sprawdzicie działanie tego programu?

    View Slide

  13. 13
    Kiedy pisać testy w projekcie

    View Slide

  14. Projekt powstający bez testów

    View Slide

  15. Projekt z testami napisanymi na koniec

    View Slide

  16. Test Driven Development
    • Testy jako element
    procesu
    • Najpierw testy
    • Testy wpływają na
    architecture
    • Testy przyśpieszają
    dalszą pracę
    Idź za testem

    View Slide

  17. Red Green Refactor
    Cykl pracy
    Red
    Green
    Refactor
    Napisz test który
    nie przechodzi.
    Napisz implementację.
    Test przechodzi.
    Refactoring.
    Poprawiamy.

    View Slide

  18. Co testować?
    Testuj
    •Logika
    •Zmiana stanu
    •Przepływ danych
    Nie ma sensu
    •Konstruktory
    •Kod
    deklaratywny
    18

    View Slide

  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

    View Slide

  20. TDD, pair programming
    Popracujmy w parach

    View Slide

  21. Tworzymy kod przez
    kompozycję.
    Większość naszych klas
    wykorzystuje inne klasy
    do działania.
    • Jak je testować?
    • Czy to dalej testy
    jednostkowe?
    21

    View Slide

  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

    View Slide

  23. Relacja pomiędzy klasami
    Baza
    danych
    User
    Service
    Username
    Repository
    Username
    Validator
    Password
    Validator

    View Slide

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

    View Slide

  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

    View Slide

  26. Stub
    User
    Service
    Username
    Repository
    Stub
    Username
    Validator
    Password
    Validator
    Not real
    data

    View Slide

  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

    View Slide

  28. Mock
    User
    Service
    Username
    Repository
    Mock
    Username
    Validator
    Password
    Validator

    View Slide

  29. Testy jednostkowe w C#
    • Moq
    • FakeItEasy
    • Microsoft Fakes
    • NMock
    • …
    Biblioteki do “izolacji” wspierające framworki

    View Slide

  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

    View Slide

  31. Dziękujemy za uwagę
    michalczukm
    [email protected]
    Mateusz Turzyński
    [email protected]
    Michał Michalczuk
    mturzynskigoyello

    View Slide