SlideShare a Scribd company logo
1 of 35
Download to read offline
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

What's hot

Unit testing w praktyce... czyli właściwie jak?
Unit testing w praktyce... czyli właściwie jak?Unit testing w praktyce... czyli właściwie jak?
Unit testing w praktyce... czyli właściwie jak?Bartłomiej Cymanowski
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlSebastian Marek
 
Monika Braun - "Tester i frameworki agilowe - rola testera w różnych metodyka...
Monika Braun - "Tester i frameworki agilowe - rola testera w różnych metodyka...Monika Braun - "Tester i frameworki agilowe - rola testera w różnych metodyka...
Monika Braun - "Tester i frameworki agilowe - rola testera w różnych metodyka...kraqa
 
Skok na naderwanym bungee, czyli agile bez automatyzacji
Skok na naderwanym bungee, czyli agile bez automatyzacjiSkok na naderwanym bungee, czyli agile bez automatyzacji
Skok na naderwanym bungee, czyli agile bez automatyzacjiWitold Bołt
 
4Developers 2018: Testy jednostkowe na lata (Marcin Czarnecki)
4Developers 2018: Testy jednostkowe na lata (Marcin Czarnecki)4Developers 2018: Testy jednostkowe na lata (Marcin Czarnecki)
4Developers 2018: Testy jednostkowe na lata (Marcin Czarnecki)PROIDEA
 
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13Więcej testów/mniej kodu - Michał Gaworski, kraQA 13
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13kraqa
 
Evolving architecture @ 4Developers 2017
Evolving architecture @ 4Developers 2017Evolving architecture @ 4Developers 2017
Evolving architecture @ 4Developers 2017Daniel Pokusa
 

What's hot (12)

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

Viewers also liked

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

Viewers also liked (19)

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

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

Confitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ AllegroConfitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ Allegroallegro.tech
 
MS - Wprowadzenie do testów jednostkowych
MS - Wprowadzenie do testów jednostkowychMS - Wprowadzenie do testów jednostkowych
MS - Wprowadzenie do testów jednostkowychMarcin Samsonowski
 
CI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieCI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieGrzegorz Godlewski
 
Code review
Code reviewCode review
Code reviewDivante
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowychTomasz Borowski
 
10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowania10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowaniaSecuRing
 
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech DworakowskiPROIDEA
 
Shall we play a game? PL version
Shall we play a game? PL versionShall we play a game? PL version
Shall we play a game? PL versionMaciej Lasyk
 
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...Infoshare
 
InfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacji
InfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacjiInfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacji
InfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacjiJIT Solutions
 
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...Future Processing
 
[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...
[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...
[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...Future Processing
 
SkładQA 2018 - Daniel Dec
SkładQA 2018 - Daniel DecSkładQA 2018 - Daniel Dec
SkładQA 2018 - Daniel Deckraqa
 
Dbanie o jakość kodu w dużej organizacji
Dbanie o jakość kodu w dużej organizacjiDbanie o jakość kodu w dużej organizacji
Dbanie o jakość kodu w dużej organizacjiŁukasz Młyński
 
Cocoa źródła informacji - część 1.
Cocoa   źródła informacji - część 1.Cocoa   źródła informacji - część 1.
Cocoa źródła informacji - część 1.Błażej Biesiada
 
JAK TESTOWAĆ CZYSTY KOD JAVASCRIPT?
JAK TESTOWAĆ CZYSTY KOD JAVASCRIPT?JAK TESTOWAĆ CZYSTY KOD JAVASCRIPT?
JAK TESTOWAĆ CZYSTY KOD JAVASCRIPT?Piotr Nalepa
 
Piątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous DeliveryPiątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous DeliveryXSolve
 

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

Confitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ AllegroConfitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ Allegro
 
MS - Wprowadzenie do testów jednostkowych
MS - Wprowadzenie do testów jednostkowychMS - Wprowadzenie do testów jednostkowych
MS - Wprowadzenie do testów jednostkowych
 
university day 1
university day 1university day 1
university day 1
 
CI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieCI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecie
 
Code review
Code reviewCode review
Code review
 
Kwestionowanie ISTQB
Kwestionowanie ISTQBKwestionowanie ISTQB
Kwestionowanie ISTQB
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
 
10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowania10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowania
 
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
 
Shall we play a game? PL version
Shall we play a game? PL versionShall we play a game? PL version
Shall we play a game? PL version
 
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...
 
InfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacji
InfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacjiInfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacji
InfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacji
 
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
 
[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...
[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...
[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...
 
Testowanie automatyczne 2024 INCO Academy
Testowanie automatyczne 2024 INCO AcademyTestowanie automatyczne 2024 INCO Academy
Testowanie automatyczne 2024 INCO Academy
 
SkładQA 2018 - Daniel Dec
SkładQA 2018 - Daniel DecSkładQA 2018 - Daniel Dec
SkładQA 2018 - Daniel Dec
 
Dbanie o jakość kodu w dużej organizacji
Dbanie o jakość kodu w dużej organizacjiDbanie o jakość kodu w dużej organizacji
Dbanie o jakość kodu w dużej organizacji
 
Cocoa źródła informacji - część 1.
Cocoa   źródła informacji - część 1.Cocoa   źródła informacji - część 1.
Cocoa źródła informacji - część 1.
 
JAK TESTOWAĆ CZYSTY KOD JAVASCRIPT?
JAK TESTOWAĆ CZYSTY KOD JAVASCRIPT?JAK TESTOWAĆ CZYSTY KOD JAVASCRIPT?
JAK TESTOWAĆ CZYSTY KOD JAVASCRIPT?
 
Piątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous DeliveryPiątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous Delivery
 

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