SlideShare a Scribd company logo
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
Kto jest kim?
Piotr Kiebasiński,
piotr.kiebasinski@j-labs.pl
Absolwent IF UJ, z zamiłowania i wyboru konsultant i
kontraktor w IT
Java, Linux, Bash, Python i parę innych 
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
Jak to zwykle wygląda na samym początku?
• Nowy pracownik na praktykach -> czyli napisz mi tutaj
testy, bo pokrycie kiepskie 
Jak to zwykle wygląda na początku?
•NUDA!
Pierwszy porządny bug – czyli NullPointerException
• Tylko że rzadko jest tak:
Pierwszy porządny bug – czyli NullPointerException
• Częściej tak:
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
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?
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
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.”
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
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
Spock - wprowadzenie
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
Spock - uniezależnienie się od zewnętrznych systemów
Spock - uniezależnienie się od zewnętrznych systemów
• Czemu testy przecież kod jest banalny na oko?
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ść
Spock - uniezależnienie się od zewnętrznych systemów
Spock - wprowadzenie
Spock - wprowadzenie
Spock - wprowadzenie
Spock - given-when-then-where
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
Spock - given-when-then-where
Spock - given-when-then-where
Spock - given-when-then-where
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.
Spock - Controller story
Spock - Controller story
Spock - Controller story
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)
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
Spock - WOW features - podsumowanie
Pytania?
Dziękuję za uwagę!

More Related Content

PDF
Testy jednostkowe - 8 rzeczy, które musisz wiedzieć
PDF
Techniczna organizacja zespołu
PDF
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
PDF
Czy na pewno wiesz już wszystko o testach jednostkowych w Javie?
PPTX
Techniczna organizacja zespołu cz 2
PDF
TDD w iOS
PDF
Nie tylko C# - Ekosystem Microsoft dla programistów
PDF
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
Testy jednostkowe - 8 rzeczy, które musisz wiedzieć
Techniczna organizacja zespołu
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Czy na pewno wiesz już wszystko o testach jednostkowych w Javie?
Techniczna organizacja zespołu cz 2
TDD w iOS
Nie tylko C# - Ekosystem Microsoft dla programistów
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP

What's hot (12)

PDF
[TestWarez 2017] Skomplikowane testowanie, skomplikowane terminy. Testowanie ...
PDF
Why tdd is slowing you down
PPTX
Unit testing w praktyce... czyli właściwie jak?
PDF
Praktyczne code reviews - PHPConPl
PPTX
Monika Braun - "Tester i frameworki agilowe - rola testera w różnych metodyka...
PPTX
Skok na naderwanym bungee, czyli agile bez automatyzacji
PDF
4Developers 2018: Testy jednostkowe na lata (Marcin Czarnecki)
PDF
Branch-per-feature
PPTX
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13
PDF
Evolving architecture @ 4Developers 2017
PPTX
PPTX
Olga Żądło - Robot Framework
[TestWarez 2017] Skomplikowane testowanie, skomplikowane terminy. Testowanie ...
Why tdd is slowing you down
Unit testing w praktyce... czyli właściwie jak?
Praktyczne code reviews - PHPConPl
Monika Braun - "Tester i frameworki agilowe - rola testera w różnych metodyka...
Skok na naderwanym bungee, czyli agile bez automatyzacji
4Developers 2018: Testy jednostkowe na lata (Marcin Czarnecki)
Branch-per-feature
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13
Evolving architecture @ 4Developers 2017
Olga Żądło - Robot Framework
Ad

Viewers also liked (19)

PDF
PLNOG15: NFV: Lessons learned from production deployments and current observa...
PDF
CONFidence 2015: Let's play SOCer Security Operations Center i Teoria Chaosu ...
PPTX
CONFidence 2015: Fuzz your way into the web server's zoo - Andrey Plastunov
PDF
Atmosphere Conference 2015: Bottoms-up and back DevOps
PDF
Atmosphere Conference 2015: Building And Releasing A Massively Multiplayer On...
PPTX
Atmosphere Conference 2015: PubSub++ - few tips that make your life with kafk...
PDF
PLNOG15 - Wi-Fi Calling – how any Wi-FI infrastructure can become a part of M...
PDF
CONFidence 2015: APT x 3 - trzy firmy, trzy wektory ataków, trzy do zera - wy...
PDF
Atmosphere Conference 2015: Do you think you're doing microservices?
PDF
PLNOG15: How to effectively build the networks with 1.1 POPC programme? - Mar...
PDF
JDD2015: Sharding with Akka Cluster: From Theory to Production - Krzysztof Ot...
PPTX
Atmosphere Conference 2015: Oktawave Horizon Project: the future of real-time...
PPTX
PLNOG15: Internet of things and modern M2M solutions. New market for new serv...
PPT
CONFidence 2015: iOS Hacking: Advanced Pentest & Forensic Techniques - Omer S...
ODP
CONFidence 2015: Defensive Time-Out or unclear digressions about past present...
PDF
4Developers 2015: Continuous Security in DevOps - Maciej Lasyk
PDF
JDD2015: Trudne Rozmowy [WORKSHOP] - Mariusz Sieraczkiewicz
PDF
PLNOG 13: Artur Gmaj: Architecture of Modern Data Center
PPTX
PLNOG15: NFV: Lessons learned from production deployments and current observa...
CONFidence 2015: Let's play SOCer Security Operations Center i Teoria Chaosu ...
CONFidence 2015: Fuzz your way into the web server's zoo - Andrey Plastunov
Atmosphere Conference 2015: Bottoms-up and back DevOps
Atmosphere Conference 2015: Building And Releasing A Massively Multiplayer On...
Atmosphere Conference 2015: PubSub++ - few tips that make your life with kafk...
PLNOG15 - Wi-Fi Calling – how any Wi-FI infrastructure can become a part of M...
CONFidence 2015: APT x 3 - trzy firmy, trzy wektory ataków, trzy do zera - wy...
Atmosphere Conference 2015: Do you think you're doing microservices?
PLNOG15: How to effectively build the networks with 1.1 POPC programme? - Mar...
JDD2015: Sharding with Akka Cluster: From Theory to Production - Krzysztof Ot...
Atmosphere Conference 2015: Oktawave Horizon Project: the future of real-time...
PLNOG15: Internet of things and modern M2M solutions. New market for new serv...
CONFidence 2015: iOS Hacking: Advanced Pentest & Forensic Techniques - Omer S...
CONFidence 2015: Defensive Time-Out or unclear digressions about past present...
4Developers 2015: Continuous Security in DevOps - Maciej Lasyk
JDD2015: Trudne Rozmowy [WORKSHOP] - Mariusz Sieraczkiewicz
PLNOG 13: Artur Gmaj: Architecture of Modern Data Center
Ad

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

PDF
Noc informatyka - co ja wiem o testowaniu
PDF
Confitura 2015 - Code Quality Keepers @ Allegro
PDF
4Developers 2018: Unit testing - introduction (Marek Kawczyński)
PPS
Poznańska grupa .Net spotkanie VI - Test Driven Development
PPTX
4Developers: Sebastian Malaca- Spotkania, na których chcesz być obecny
PDF
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
PDF
Perl. Testowanie. Zapiski programisty
PDF
Najważniejszym czynnikiem dobrych testów, nie jest pisanie dobrych testów
PDF
JUnit. Pragmatyczne testy jednostkowe w Javie
PDF
Wprowadzenie do PHPUnit
PDF
TDD drogą do oświecenia w Scali
PPTX
JDD 2017: Why is TDD slowing you down? (Jakub Janczyk, Wojciech Przechodzień)
PDF
Scala
PPTX
Testy jednostkowe - PHPUnit
PDF
Girls in IT - QA
PDF
Let's tests! Prezentacja Moniki Braun w trakcie warsztatów "Let's go to IT"
PDF
Refactoring - Jak pozostać przy zdrowych zmysłach, redukując dług
PDF
Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)
Noc informatyka - co ja wiem o testowaniu
Confitura 2015 - Code Quality Keepers @ Allegro
4Developers 2018: Unit testing - introduction (Marek Kawczyński)
Poznańska grupa .Net spotkanie VI - Test Driven Development
4Developers: Sebastian Malaca- Spotkania, na których chcesz być obecny
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
Perl. Testowanie. Zapiski programisty
Najważniejszym czynnikiem dobrych testów, nie jest pisanie dobrych testów
JUnit. Pragmatyczne testy jednostkowe w Javie
Wprowadzenie do PHPUnit
TDD drogą do oświecenia w Scali
JDD 2017: Why is TDD slowing you down? (Jakub Janczyk, Wojciech Przechodzień)
Scala
Testy jednostkowe - PHPUnit
Girls in IT - QA
Let's tests! Prezentacja Moniki Braun w trakcie warsztatów "Let's go to IT"
Refactoring - Jak pozostać przy zdrowych zmysłach, redukując dług
Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)

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

  • 1. 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
  • 2. Kto jest kim? Piotr Kiebasiński, piotr.kiebasinski@j-labs.pl Absolwent IF UJ, z zamiłowania i wyboru konsultant i kontraktor w IT Java, Linux, Bash, Python i parę innych 
  • 3. 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
  • 4. Jak to zwykle wygląda na samym początku? • Nowy pracownik na praktykach -> czyli napisz mi tutaj testy, bo pokrycie kiepskie 
  • 5. Jak to zwykle wygląda na początku? •NUDA!
  • 6. Pierwszy porządny bug – czyli NullPointerException • Tylko że rzadko jest tak:
  • 7. Pierwszy porządny bug – czyli NullPointerException • Częściej tak:
  • 8. 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
  • 9. 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?
  • 10. 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
  • 11. 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.”
  • 12. 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
  • 13. 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
  • 15. 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
  • 16. Spock - uniezależnienie się od zewnętrznych systemów
  • 17. Spock - uniezależnienie się od zewnętrznych systemów • Czemu testy przecież kod jest banalny na oko?
  • 18. 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ść
  • 19. Spock - uniezależnienie się od zewnętrznych systemów
  • 24. 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
  • 28. 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.
  • 32. 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)
  • 33. 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
  • 34. Spock - WOW features - podsumowanie