35
Kilka słów o testowaniu dla programistów czyli o testach, BDD, Spocku i kilku innych drobiazgach 20 kwietnia, 2015 Warszawa, 4dev Piotr Kiebasiński

4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

  • Upload
    proidea

  • View
    86

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Kilka słów o testowaniu dla programistów

czyli o testach, BDD, Spocku i kilku innych

drobiazgach

20 kwietnia, 2015 Warszawa, 4dev

Piotr Kiebasiński

Page 2: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Kto jest kim?

Piotr Kiebasiński,

[email protected]

Absolwent IF UJ, z zamiłowania i wyboru konsultant i

kontraktor w IT

Java, Linux, Bash, Python i parę innych

Page 3: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

j-labs competences

• Over 80 engineers in Cracow office

• On market since 2008

• Member of ASPIRE – association of IT and BPO centers

• Main technology areas: Java / JEE, .NET / ASP.NET, QA

• Reliable partner for international organizations

Page 4: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Jak to zwykle wygląda na samym początku?

• Nowy pracownik na praktykach -> czyli napisz mi tutaj

testy, bo pokrycie kiepskie

Page 5: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Jak to zwykle wygląda na początku?

•NUDA!

Page 6: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Pierwszy porządny bug – czyli NullPointerException

• Tylko że rzadko jest tak:

Page 7: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Pierwszy porządny bug – czyli NullPointerException

• Częściej tak:

Page 8: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Po co testy?

• Dlaczego pisać testy przy tak prostych błędach?

• Bo pewność

• Bo powtarzalność (automatyzacja)

• Bo refaktoring

• Bo kod żyje dużo dłużej po napisaniu niż nam się wydaje

• Bo można sprawdzić kiedy się zepsuje znowu

Page 9: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Pierwszy porządny bug – czyli NullPointerException

• Ale jak to przetestować?

• Czyli skąd wziąć:

• UserDao

• AuthorDao

• I jeszcze być pewnym że zwrócą to co chcemy?

Page 10: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Pierwszy porządny bug – czyli NullPointerException

• Metoda I – użyć prawdziwych obiektów i porobić

odpowiednie wpisy w bazie (testy integracyjne)

• Metoda II – czyli zasymulować – zamockować zachowanie

na którym nam zależy

• Mockito, PowerMock, Jmockit etc

• Spock

Page 11: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - wprowadzenie

• Link: https://code.google.com/p/spock/

• „Spock is a testing and specification framework for Java and Groovy applications. What makes it stand out from the crowd is its beautiful and highly expressive specification language. Thanks to its JUnit runner, Spock is compatible with most IDEs, build tools, and continuous integration servers. Spock is inspired from JUnit, RSpec, jMock, Mockito, Groovy, Scala, Vulcans, and other fascinating life forms.”

Page 12: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - wprowadzenie

• Łatwy do nauczenia –wymaga w zasadzie JUnita

• Stworzony w Groovym - z całym dobrodziejstwem

inwentarza

• Eliminuje niepotrzebną pracę – na przykład pisanie asercji

• Szczegółowe informacje – choćby w opisowych nazwach

metod albo w komunikatach błędów

Page 13: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - wprowadzenie

• Nie narzuca metodyki pisania testów

• Czytelny kod – chyba że ktoś się mocno postara

• Elastyczny i rozszerzalny – Spring, transakcje etc – żaden

problem

• Kompatybilny z JUnitem

Page 14: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - wprowadzenie

Page 15: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - uniezależnienie się od zewnętrznych systemów

• Story: Należy stworzyć mechanizm, który zapisze incydent

w przypadku kiedy w bazie danych mamy problemy z

odświeżeniem się widoku

Page 16: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - uniezależnienie się od zewnętrznych systemów

Page 17: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - uniezależnienie się od zewnętrznych systemów

• Czemu testy przecież kod jest banalny na oko?

Page 18: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Po co testy?

• Dlaczego pisać testy przy tak prostym kodzie?

• Bo pewność

• Bo powtarzalność (automatyzacja)

• Bo refaktoring

• Bo kod żyje dużo dłużej po napisaniu niż nam się wydaje

• Bo można sprawdzić kiedy się zepsuje znowu

• Bo jakość

Page 19: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - uniezależnienie się od zewnętrznych systemów

Page 20: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - wprowadzenie

Page 21: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - wprowadzenie

Page 22: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - wprowadzenie

Page 23: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - given-when-then-where

Page 24: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Po co testy?

• Dlaczego pisać testy w taki sposób?

• Bo pewność

• Bo powtarzalność (automatyzacja)

• Bo refaktoring

• Bo kod żyje dużo dłużej po napisaniu niż nam się wydaje

• Bo można sprawdzić kiedy się zepsuje znowu

• Bo jakość

• Bo porządkuje nam myślenie

Page 25: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - given-when-then-where

Page 26: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - given-when-then-where

Page 27: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - given-when-then-where

Page 28: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - uniezależnienie się od zewnętrznych systemów

• Story: Należy stworzyć kontroler obsługujący procedurę

bazodanową liczącą pewne statystyki (duży wolumen

danych) i zwracający w pozytywnym scenariuszu zawartość

pliku. Obsługa błędów w myśl specjalnego dokumentu.

Page 29: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - Controller story

Page 30: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - Controller story

Page 31: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - Controller story

Page 32: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - WOW features - podsumowanie

• Mockowanie:

def subscriber = Mock(Subscriber)

• Czytelność

when:

publisher.send("hello")

then:

1 * subscriber.receive("hello")

publisher.messageCount == 1

• where (dopisanie przypadku testowego)

Page 33: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - WOW features - podsumowanie

• Wymuszenie porządku

given/when/then

• operacje kolekcjach (vide możliwości Groovego)

[], [:], <<, every

• czytelne asercje

• http://spock-framework.readthedocs.org/en/latest/interaction_based_testing.html

Page 34: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Spock - WOW features - podsumowanie

Page 35: 4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piotr Kiebasiński

Pytania?

Dziękuję za uwagę!