Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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ą

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

13 Kiedy pisać testy w projekcie

Slide 14

Slide 14 text

Projekt powstający bez testów

Slide 15

Slide 15 text

Projekt z testami napisanymi na koniec

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

TDD, pair programming Popracujmy w parach

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

To wciąż testy jednostkowe. Dalej testujemy tylko jedną klasę. Oraz kontrakty pomiędzy klasami. 22 Jeśli nie użyjemy implementacji klas zależnych

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

Mock User Service Username Repository Mock Username Validator Password Validator

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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