An old preso (in Polish) from May 2013 about testing and TDD for the beginner's crowd. Stara prezentacja z maja 2013 o testowaniu i TDD dla początkujących.
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.
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