SlideShare uma empresa Scribd logo
1 de 17
Baixar para ler offline
Co ja wiem o
testowaniu
Tomek "LAFK" Borek
Siódma Noc
Informatyka
26 maj 2013
@gmail.com alias @LAFK_pl
Tomasz Borek
LAFK => lafkblogs.wordpress.com
O czym to?
● Kiedy warto
● Stopnie testowania
● Zaawansowane (krótko): TDD i inne takie
● Najważniejsze: jednostkowe
● Struktura (Scala i Java)
● Narzędzia: cud Spock, czad Mockito, ugh
PowerMock.
Droga do TDD
Brak Manualne "PO" "PRZED" TDD
Nazwy i rodzaje i smaczki
● TDD (zwykłe, as if you meant
it),
● ATDD, BDD...
● ścieżek (zwykła, krytyczna,
pechowa)
● warunków brzegowych...
● wydajnościowe,
● od deski do deski,
● komponentów,
● systemowe,
● integracyjne,
● bezpieczeństwa,
● interfejsu graficznego...
● w literaturze różnie
● to samo słowo, inne
znaczenia
● ustalcie własne!
(!) JEDNOSTKOWE!!!
Błąd kompilacji ma znaczenie.
tak, zdarza się, a czasem
nawet jest potrzebne!
PRAWDZIWY cykl TDD
minimum kodu
by przeszło
nie "gada z bazą"
nie potrzeba mu Internetu,
szybki,
odpowiednio nazwany,
jasny, przejrzysty, klarowny,
testuje jedną rzecz,
nie dwie, nie tysiąc
Test jednostkowy
nie kombinuje w konstruktorze,
przestrzega prawa Demeter,
nie potrzebuje setki kolaboratorów,
jest krótka,
odpowiednio nazwana,
realizuje jedną rzecz,
nie dwie, nie tysiąc
Dlatego też klasa
TD
D
, kata
obiektowa
kalistenika
Struktura testu - Java, JUnit
package lafk.nocinformatyka.junit;
import org.junit.Test;
public class ExemplaryJUnitTest {
@Test
private void testNameStatesWhatItTests() {
// given
ObjectUnderTest objTested = new ObjectUnderTest(with, required, params, for,
complete, setup);
// when
objTested.performsTestedAction();
// then
assertEquals(expected, actual) // Lub vice versa? Częste pomyłki tutaj.
}
}
FEST jest fest pomocą.
Błędy?
Struktura testu - Java, TestNG
Dzięki Cedryku!
Przykład
z oficjalnej strony.
Struktura testu - ScalaTest
behaviour of "Something"
it should "have expressive name" in {
// given
val anObject : UnderTest = new UnderTest();
// when
val result = anObject.testedMethod();
// then
result should be ("expressive");
}
Struktura testu - ScalaTest++
behaviour of "Something"
it should "have expressive name" in {
// given
val anObject = new UnderTest
// when
val result = anObject.testedMethod()
// then
result should be ("expressive")
}
Czapki z głów - Spock
// power assert Spock example
// == is power assert operator
myObject.myVar == otherObject.fieldICompareTo
| | | | |
| 5 | | "qq"
| | |
| | lafk...OtherObject@hash1
| |
| false + powód dlaczego, np. bo 5 != "qq"
| albo otherObject jest null itp.
lafk...MyObject@hash2
Stanowcze NIE - PowerMock
● Mockito, Obiektowość
○ final
○ static
○ można nie znaczy trzeba
● Jak?
○ classloader
○ refleksja
● Dodajmy:
○ pokrycie kodu i inszą instrumentację
○ ciekawsze testy (zależności, mutacje, z danymi)
○ Mavena
● efekt? a kuku
- próbują wyciąć Mockito
- odpowiadanie na problemy
● Droga do TDD, ATDD, BDD...
prawdziwego testowania w każdym razie.
● Cykl niekoniecznie ma trzy etapy.
● Błąd kompilacji == Pierwszy Czerwony Test
● Testy jednostkowe, nie integracyjne
● Testy jako Dokumentacja
● Given When Then, Mockito, Spock, TestNG
● Wywalcie PowerMock'a
Podsumowanie - Testy
● SCKRK / Code Kata / Callisthenics
● Tomasz Kaczanowski - practicalunittesting.com
● API! JUnit, TestNG, Mockito, ScalaTest, Spock...
● Misko Hevery: How to write testable code
● Polish Java User Group - zapytajcie kolegów
● Inżynieria Jakości - Bolesław Szomański,
Bohdan Bereza-Jarociński
Podsumowanie - Linki
THANKS!
// todo implement this
behaviour of "those who ask questions"
they should "ask them politely" in pending
they should "ask them loudly so they'll be
heard over snoring" in pending
they should "go to sleep" in pending
Tomasz Borek - @LAFK_pl
Noc Informatyka 2013

Mais conteúdo relacionado

Mais de Tomek Borek

Teaching PostgreSQL to new people
Teaching PostgreSQL to new peopleTeaching PostgreSQL to new people
Teaching PostgreSQL to new peopleTomek Borek
 
Nowoczesne architektury
Nowoczesne architekturyNowoczesne architektury
Nowoczesne architekturyTomek Borek
 
Java tuning on GNU/Linux for busy dev
Java tuning on GNU/Linux for busy devJava tuning on GNU/Linux for busy dev
Java tuning on GNU/Linux for busy devTomek Borek
 
Jvm tuning in a rush! - Lviv JUG
Jvm tuning in a rush! - Lviv JUGJvm tuning in a rush! - Lviv JUG
Jvm tuning in a rush! - Lviv JUGTomek Borek
 
Java Memory Consistency Model - concepts and context
Java Memory Consistency Model - concepts and contextJava Memory Consistency Model - concepts and context
Java Memory Consistency Model - concepts and contextTomek Borek
 
Seeing through the smoke
Seeing through the smokeSeeing through the smoke
Seeing through the smokeTomek Borek
 
AR drone - Polish JUG short demo
AR drone - Polish JUG short demoAR drone - Polish JUG short demo
AR drone - Polish JUG short demoTomek Borek
 
Testing SAAS, how to go about it?
Testing SAAS, how to go about it?Testing SAAS, how to go about it?
Testing SAAS, how to go about it?Tomek Borek
 
Spróbujmy szczęścia bo zaciskanie pięści nie działa
Spróbujmy szczęścia bo zaciskanie pięści nie działaSpróbujmy szczęścia bo zaciskanie pięści nie działa
Spróbujmy szczęścia bo zaciskanie pięści nie działaTomek Borek
 
Łukasz Romaszewski on Internet of Things Raspberry Pi and Java Embedded JavaC...
Łukasz Romaszewski on Internet of Things Raspberry Pi and Java Embedded JavaC...Łukasz Romaszewski on Internet of Things Raspberry Pi and Java Embedded JavaC...
Łukasz Romaszewski on Internet of Things Raspberry Pi and Java Embedded JavaC...Tomek Borek
 
Lightning talk on Java Memory Consistency Model Java Day Kiev 2014
Lightning talk on Java Memory Consistency Model Java Day Kiev 2014Lightning talk on Java Memory Consistency Model Java Day Kiev 2014
Lightning talk on Java Memory Consistency Model Java Day Kiev 2014Tomek Borek
 
Few words about happiness (Polish talk) / O szczęściu słów kilka
Few words about happiness (Polish talk) / O szczęściu słów kilkaFew words about happiness (Polish talk) / O szczęściu słów kilka
Few words about happiness (Polish talk) / O szczęściu słów kilkaTomek Borek
 
Jak użytecznie, prawdziwie i solidnie odpowiedzieć na pytanie "jak było"
Jak użytecznie, prawdziwie i solidnie odpowiedzieć na pytanie "jak było"Jak użytecznie, prawdziwie i solidnie odpowiedzieć na pytanie "jak było"
Jak użytecznie, prawdziwie i solidnie odpowiedzieć na pytanie "jak było"Tomek Borek
 
It's not always the application's fault
It's not always the application's faultIt's not always the application's fault
It's not always the application's faultTomek Borek
 
To nie zawsze wina aplikacji!
To nie zawsze wina aplikacji!To nie zawsze wina aplikacji!
To nie zawsze wina aplikacji!Tomek Borek
 
Wprowadzenie do optymalizacji wielokryterialnej / Intro to multicriteria opti...
Wprowadzenie do optymalizacji wielokryterialnej / Intro to multicriteria opti...Wprowadzenie do optymalizacji wielokryterialnej / Intro to multicriteria opti...
Wprowadzenie do optymalizacji wielokryterialnej / Intro to multicriteria opti...Tomek Borek
 
Git nie dla początkujących
Git nie dla początkującychGit nie dla początkujących
Git nie dla początkującychTomek Borek
 
Architecture visualizers - tools usability study
Architecture visualizers - tools usability studyArchitecture visualizers - tools usability study
Architecture visualizers - tools usability studyTomek Borek
 
Meta on HCI - keyword analysis and trends
Meta on HCI - keyword analysis and trendsMeta on HCI - keyword analysis and trends
Meta on HCI - keyword analysis and trendsTomek Borek
 
"Narco" emotions - description of study on whether Twitter can be used to gle...
"Narco" emotions - description of study on whether Twitter can be used to gle..."Narco" emotions - description of study on whether Twitter can be used to gle...
"Narco" emotions - description of study on whether Twitter can be used to gle...Tomek Borek
 

Mais de Tomek Borek (20)

Teaching PostgreSQL to new people
Teaching PostgreSQL to new peopleTeaching PostgreSQL to new people
Teaching PostgreSQL to new people
 
Nowoczesne architektury
Nowoczesne architekturyNowoczesne architektury
Nowoczesne architektury
 
Java tuning on GNU/Linux for busy dev
Java tuning on GNU/Linux for busy devJava tuning on GNU/Linux for busy dev
Java tuning on GNU/Linux for busy dev
 
Jvm tuning in a rush! - Lviv JUG
Jvm tuning in a rush! - Lviv JUGJvm tuning in a rush! - Lviv JUG
Jvm tuning in a rush! - Lviv JUG
 
Java Memory Consistency Model - concepts and context
Java Memory Consistency Model - concepts and contextJava Memory Consistency Model - concepts and context
Java Memory Consistency Model - concepts and context
 
Seeing through the smoke
Seeing through the smokeSeeing through the smoke
Seeing through the smoke
 
AR drone - Polish JUG short demo
AR drone - Polish JUG short demoAR drone - Polish JUG short demo
AR drone - Polish JUG short demo
 
Testing SAAS, how to go about it?
Testing SAAS, how to go about it?Testing SAAS, how to go about it?
Testing SAAS, how to go about it?
 
Spróbujmy szczęścia bo zaciskanie pięści nie działa
Spróbujmy szczęścia bo zaciskanie pięści nie działaSpróbujmy szczęścia bo zaciskanie pięści nie działa
Spróbujmy szczęścia bo zaciskanie pięści nie działa
 
Łukasz Romaszewski on Internet of Things Raspberry Pi and Java Embedded JavaC...
Łukasz Romaszewski on Internet of Things Raspberry Pi and Java Embedded JavaC...Łukasz Romaszewski on Internet of Things Raspberry Pi and Java Embedded JavaC...
Łukasz Romaszewski on Internet of Things Raspberry Pi and Java Embedded JavaC...
 
Lightning talk on Java Memory Consistency Model Java Day Kiev 2014
Lightning talk on Java Memory Consistency Model Java Day Kiev 2014Lightning talk on Java Memory Consistency Model Java Day Kiev 2014
Lightning talk on Java Memory Consistency Model Java Day Kiev 2014
 
Few words about happiness (Polish talk) / O szczęściu słów kilka
Few words about happiness (Polish talk) / O szczęściu słów kilkaFew words about happiness (Polish talk) / O szczęściu słów kilka
Few words about happiness (Polish talk) / O szczęściu słów kilka
 
Jak użytecznie, prawdziwie i solidnie odpowiedzieć na pytanie "jak było"
Jak użytecznie, prawdziwie i solidnie odpowiedzieć na pytanie "jak było"Jak użytecznie, prawdziwie i solidnie odpowiedzieć na pytanie "jak było"
Jak użytecznie, prawdziwie i solidnie odpowiedzieć na pytanie "jak było"
 
It's not always the application's fault
It's not always the application's faultIt's not always the application's fault
It's not always the application's fault
 
To nie zawsze wina aplikacji!
To nie zawsze wina aplikacji!To nie zawsze wina aplikacji!
To nie zawsze wina aplikacji!
 
Wprowadzenie do optymalizacji wielokryterialnej / Intro to multicriteria opti...
Wprowadzenie do optymalizacji wielokryterialnej / Intro to multicriteria opti...Wprowadzenie do optymalizacji wielokryterialnej / Intro to multicriteria opti...
Wprowadzenie do optymalizacji wielokryterialnej / Intro to multicriteria opti...
 
Git nie dla początkujących
Git nie dla początkującychGit nie dla początkujących
Git nie dla początkujących
 
Architecture visualizers - tools usability study
Architecture visualizers - tools usability studyArchitecture visualizers - tools usability study
Architecture visualizers - tools usability study
 
Meta on HCI - keyword analysis and trends
Meta on HCI - keyword analysis and trendsMeta on HCI - keyword analysis and trends
Meta on HCI - keyword analysis and trends
 
"Narco" emotions - description of study on whether Twitter can be used to gle...
"Narco" emotions - description of study on whether Twitter can be used to gle..."Narco" emotions - description of study on whether Twitter can be used to gle...
"Narco" emotions - description of study on whether Twitter can be used to gle...
 

Noc informatyka - co ja wiem o testowaniu

  • 1. Co ja wiem o testowaniu Tomek "LAFK" Borek Siódma Noc Informatyka 26 maj 2013
  • 2. @gmail.com alias @LAFK_pl Tomasz Borek LAFK => lafkblogs.wordpress.com
  • 3. O czym to? ● Kiedy warto ● Stopnie testowania ● Zaawansowane (krótko): TDD i inne takie ● Najważniejsze: jednostkowe ● Struktura (Scala i Java) ● Narzędzia: cud Spock, czad Mockito, ugh PowerMock.
  • 4. Droga do TDD Brak Manualne "PO" "PRZED" TDD
  • 5. Nazwy i rodzaje i smaczki ● TDD (zwykłe, as if you meant it), ● ATDD, BDD... ● ścieżek (zwykła, krytyczna, pechowa) ● warunków brzegowych... ● wydajnościowe, ● od deski do deski, ● komponentów, ● systemowe, ● integracyjne, ● bezpieczeństwa, ● interfejsu graficznego... ● w literaturze różnie ● to samo słowo, inne znaczenia ● ustalcie własne! (!) JEDNOSTKOWE!!!
  • 6. Błąd kompilacji ma znaczenie. tak, zdarza się, a czasem nawet jest potrzebne! PRAWDZIWY cykl TDD minimum kodu by przeszło
  • 7. nie "gada z bazą" nie potrzeba mu Internetu, szybki, odpowiednio nazwany, jasny, przejrzysty, klarowny, testuje jedną rzecz, nie dwie, nie tysiąc Test jednostkowy
  • 8. nie kombinuje w konstruktorze, przestrzega prawa Demeter, nie potrzebuje setki kolaboratorów, jest krótka, odpowiednio nazwana, realizuje jedną rzecz, nie dwie, nie tysiąc Dlatego też klasa TD D , kata obiektowa kalistenika
  • 9. Struktura testu - Java, JUnit package lafk.nocinformatyka.junit; import org.junit.Test; public class ExemplaryJUnitTest { @Test private void testNameStatesWhatItTests() { // given ObjectUnderTest objTested = new ObjectUnderTest(with, required, params, for, complete, setup); // when objTested.performsTestedAction(); // then assertEquals(expected, actual) // Lub vice versa? Częste pomyłki tutaj. } } FEST jest fest pomocą. Błędy?
  • 10. Struktura testu - Java, TestNG Dzięki Cedryku! Przykład z oficjalnej strony.
  • 11. Struktura testu - ScalaTest behaviour of "Something" it should "have expressive name" in { // given val anObject : UnderTest = new UnderTest(); // when val result = anObject.testedMethod(); // then result should be ("expressive"); }
  • 12. Struktura testu - ScalaTest++ behaviour of "Something" it should "have expressive name" in { // given val anObject = new UnderTest // when val result = anObject.testedMethod() // then result should be ("expressive") }
  • 13. Czapki z głów - Spock // power assert Spock example // == is power assert operator myObject.myVar == otherObject.fieldICompareTo | | | | | | 5 | | "qq" | | | | | lafk...OtherObject@hash1 | | | false + powód dlaczego, np. bo 5 != "qq" | albo otherObject jest null itp. lafk...MyObject@hash2
  • 14. Stanowcze NIE - PowerMock ● Mockito, Obiektowość ○ final ○ static ○ można nie znaczy trzeba ● Jak? ○ classloader ○ refleksja ● Dodajmy: ○ pokrycie kodu i inszą instrumentację ○ ciekawsze testy (zależności, mutacje, z danymi) ○ Mavena ● efekt? a kuku - próbują wyciąć Mockito - odpowiadanie na problemy
  • 15. ● Droga do TDD, ATDD, BDD... prawdziwego testowania w każdym razie. ● Cykl niekoniecznie ma trzy etapy. ● Błąd kompilacji == Pierwszy Czerwony Test ● Testy jednostkowe, nie integracyjne ● Testy jako Dokumentacja ● Given When Then, Mockito, Spock, TestNG ● Wywalcie PowerMock'a Podsumowanie - Testy
  • 16. ● SCKRK / Code Kata / Callisthenics ● Tomasz Kaczanowski - practicalunittesting.com ● API! JUnit, TestNG, Mockito, ScalaTest, Spock... ● Misko Hevery: How to write testable code ● Polish Java User Group - zapytajcie kolegów ● Inżynieria Jakości - Bolesław Szomański, Bohdan Bereza-Jarociński Podsumowanie - Linki
  • 17. THANKS! // todo implement this behaviour of "those who ask questions" they should "ask them politely" in pending they should "ask them loudly so they'll be heard over snoring" in pending they should "go to sleep" in pending Tomasz Borek - @LAFK_pl Noc Informatyka 2013