This short presentation is for people who would like to start with writing unit tests. I will try to introduce idea and definition of unit testing. With simple examples, we will go through the whole unit testing development process. Unit test, mocks, stubs, TDD and more definitions will be explained in real cases.
I will try to show how and what should be tested. Of course, everything is based on my personal experience that I have gained in my developer life in the last 10+ years.
JDD 2016 - Wojciech Oczkowski - Testowanie Wydajnosci Za Pomoca Narzedzia JMHPROIDEA
W prezentacji pokażę jak wykorzystać narzędzie JMH do budowy microbenchmarków testujących wydajność zadanych kawałków kodu. Nabyte umiejętności pozwolą słuchaczom sprawdzić wydajność wybranych fragmentów kodu bez niebezpieczeństwa popełnienia, typowych dla tego typu testowania, błędów związanych z np. wygrzewaniem maszyny wirtualnej czy działalnością garbage collectora.
JDD 2016 - Wojciech Oczkowski - Testowanie Wydajnosci Za Pomoca Narzedzia JMHPROIDEA
W prezentacji pokażę jak wykorzystać narzędzie JMH do budowy microbenchmarków testujących wydajność zadanych kawałków kodu. Nabyte umiejętności pozwolą słuchaczom sprawdzić wydajność wybranych fragmentów kodu bez niebezpieczeństwa popełnienia, typowych dla tego typu testowania, błędów związanych z np. wygrzewaniem maszyny wirtualnej czy działalnością garbage collectora.
"Girls in IT” to cykl spotkań dla kobiet, które pozwalają z pierwszej ręki dowiedzieć się, jak faktycznie wygląda codzienna praca w firmie technologicznej. Chcemy, aby spotkania z ekspertkami pomogły w podjęciu decyzji na temat kariery zawodowej. Podczas każdego ze spotkań usłyszysz historie doświadczonych ekspertek, które kilka lat temu stały przed wyborem podobnym do Twojego i dowiesz się, w jaki sposób podjęły decyzję o swojej przyszłości.
Najbliższe spotkanie będzie dotyczyło roli QA w firmie technologicznej. Dowiesz się, w jaki sposób można rozwijać się w tym kierunku, jakie predyspozycje są przydatne w tej roli i z jakimi codziennymi zadaniami dokładnie się ona wiąże.
“Revert” to ostatnia faza rozpaczliwego kodowania pomysłu, który na początku wydawał się najgenialniejszym kawałkiem kodu, jaki kiedykolwiek powstał. Po zakończeniu mojej prezentacji z kilkoma konkretnymi technikami, które pomogą Ci “dokodować” swoje pomysły do końca. Przyjrzymy się między innymi: wyodrębnianiu i dekomponowaniu zadań programistycznych, planowaniu pracy, poszukiwaniu błędów w kodzie i umiejętności skupienia się.
Prezentacja dla osób, które chciałyby zacząć swoją przygodę z testowaniem kodu JS. W prezentacji omówiłem podejście do testowania oraz przekazałem informację jakich narzędzi można użyć w testowaniu kodu oraz pokazałem jak wyglądają szablony testów oraz scenariusze testowe
Confitura 2018 - Sekretne życie jobów SparkowychMarcin Jasiński
Apache Spark to coraz bardziej popularny framework do tworzenia przetwarzań Big Data. Gdy wywalają się executory, zwiększamy ilość pamięci. Gdy job wykonuje się zbyt wolno, zwiększamy ilość executorów. Zwiększenie ilości zasobów to żadna optymalizacja i z czasem nasz klaster Hadoop jest w pełni utylizowany i nie można uruchamiać kolejnych przetwarzań. A przecież da się inaczej! Klaster Hadoop w Allegro to setki jobów uruchomionych jednocześnie, z czego większość to joby Sparkowe. Opowiemy historię kilku z nich i przemiany, które przeszły. W tym najbardziej spektakularną: od 2500 do 240GB RAM.
More Related Content
Similar to 4Developers 2018: Unit testing - introduction (Marek Kawczyński)
"Girls in IT” to cykl spotkań dla kobiet, które pozwalają z pierwszej ręki dowiedzieć się, jak faktycznie wygląda codzienna praca w firmie technologicznej. Chcemy, aby spotkania z ekspertkami pomogły w podjęciu decyzji na temat kariery zawodowej. Podczas każdego ze spotkań usłyszysz historie doświadczonych ekspertek, które kilka lat temu stały przed wyborem podobnym do Twojego i dowiesz się, w jaki sposób podjęły decyzję o swojej przyszłości.
Najbliższe spotkanie będzie dotyczyło roli QA w firmie technologicznej. Dowiesz się, w jaki sposób można rozwijać się w tym kierunku, jakie predyspozycje są przydatne w tej roli i z jakimi codziennymi zadaniami dokładnie się ona wiąże.
“Revert” to ostatnia faza rozpaczliwego kodowania pomysłu, który na początku wydawał się najgenialniejszym kawałkiem kodu, jaki kiedykolwiek powstał. Po zakończeniu mojej prezentacji z kilkoma konkretnymi technikami, które pomogą Ci “dokodować” swoje pomysły do końca. Przyjrzymy się między innymi: wyodrębnianiu i dekomponowaniu zadań programistycznych, planowaniu pracy, poszukiwaniu błędów w kodzie i umiejętności skupienia się.
Prezentacja dla osób, które chciałyby zacząć swoją przygodę z testowaniem kodu JS. W prezentacji omówiłem podejście do testowania oraz przekazałem informację jakich narzędzi można użyć w testowaniu kodu oraz pokazałem jak wyglądają szablony testów oraz scenariusze testowe
Confitura 2018 - Sekretne życie jobów SparkowychMarcin Jasiński
Apache Spark to coraz bardziej popularny framework do tworzenia przetwarzań Big Data. Gdy wywalają się executory, zwiększamy ilość pamięci. Gdy job wykonuje się zbyt wolno, zwiększamy ilość executorów. Zwiększenie ilości zasobów to żadna optymalizacja i z czasem nasz klaster Hadoop jest w pełni utylizowany i nie można uruchamiać kolejnych przetwarzań. A przecież da się inaczej! Klaster Hadoop w Allegro to setki jobów uruchomionych jednocześnie, z czego większość to joby Sparkowe. Opowiemy historię kilku z nich i przemiany, które przeszły. W tym najbardziej spektakularną: od 2500 do 240GB RAM.
Similar to 4Developers 2018: Unit testing - introduction (Marek Kawczyński) (20)
2. 2
Index
co na dziś
● idea, definicja
● przykłady
● środowiska uruchomieniowe
● benefity, czym testy nie są
● test doubles
● co i jak testować
● tdd
● rzeczywistość
3. 3
● ojciec, mąż, programista
● full stack, team leader
● zarządzanie dokumentacją medyczną,
integrację, BPM, obiegi dokumentów,
energetyka, innowacje
● javascript, java
Kim jestem?
Marek Kawczyński mkawczynski@astek.pl
4. 4
Idea
Po co nam to?
The idea behind unit tests is simple: it is to make sure the
class(/function, files) you are working on right now works
correctly – to make sure it does its job. This concerns
whether, given certain input data, it will respond with a
certain expected output, or whether, fed with nonsense
data, it will throw an appropriate exception, and so on. The
idea, then, is to write tests that will verify this expected
behaviour.
“Practical Unit Testing with TestNG and Mockito” Tomek Kaczanowski
5. 5
Definicja
Test jednostkowy
Test jednostkowy (ang. unit test) – metoda testowania
tworzonego oprogramowania poprzez wykonywanie
testów weryfikujących poprawność działania
pojedynczych elementów (jednostek) programu – np.
metod lub obiektów w programowaniu obiektowym lub
procedur w programowaniu proceduralnym.
WIKI
6. 6
● skupiają się na pojedynczej klasie, funkcji
● w pełni kontrolują środowisko w jakim
nasz funkcja lub klasa jest testowana
● nie interesuje ich użytkownik końcowy
systemu, warstwy systemu czy też zasoby
- są niezależne
● wykonują się bardzo szybko, i są
uruchamiane często
● Istnieją po to aby zweryfikować czy nasz
kod działa
Definicja
istnienie, lokalizacja
9. 9
Przykład
Test jednostkowy
import expect from 'expect';
import Optional from '../../../src/share/utils/Optional' ;
describe('#Optional', () => {
it('isPresent should return true if value is present' , () => {
expect(Optional(1).isPresent()).toEqual(true);
});
});
24. 24
● Proste funkcje
Co i jak testować?
W mojej prywatnej opinii
function Optional(value) {
return {
or: orValue => isDefined(value) ? value :
orValue,
isPresent: () => isDefined(value)
};
}
25. 25
● Proste funkcje
● Publiczne funkcje, api
Co i jak testować?
W mojej prywatnej opinii
/*utils.js*/
export function addToCurrentMonth (amount) {
return amount + getCurrentMonth ();
}
function getCurrentMonth () {
return new Date().getMonth();
}
26. 26
● Proste funkcje
● Publiczne funkcje, api
● To co uważam za słuszne!
Co i jak testować?
W mojej prywatnej opinii
27. 27
● Proste funkcje
● Publiczne funkcje, api
● To co uważam za słuszne!
● Wyjście, zachowanie
Co i jak testować?
W mojej prywatnej opinii
28. 28
● Proste funkcje
● Publiczne funkcje, api
● To co uważam za słuszne!
● Wartości brzegowe
Co i jak testować?
W mojej prywatnej opinii
29. 29
● Proste funkcje
● Publiczne funkcje, api
● To co uważam za słuszne!
● Wartości brzegowe
● Wartości problematyczne
Co i jak testować?
W mojej prywatnej opinii
it('isPresent should return false if value
is undefined' , () => {
expect(Optional(void 0).isPresent())
.toEqual(false);
});
it('isPresent should return false if value
is null', () => {
expect(Optional(null).isPresent())
.toEqual(false);
});
30. 30
● Proste funkcje
● Publiczne funkcje, api
● To co uważam za słuszne!
● Wartości brzegowe
● Wartości problematyczne
● Nie przepisuj testowanego
kodu!
Co i jak testować?
W mojej prywatnej opinii
export function toDate(date) {
return moment(date, 'YYYY-MM-DD', true);
}
it('should parse date' , () => {
const actual = toDate('2011-01-01');
const expected = moment('2011-01-01',
'YYYY-MM-DD',
true
);
assert(actual).toEqual(expected);
});
31. 31
● Proste funkcje
● Publiczne funkcje, api
● To co uważam za słuszne!
● Wartości brzegowe
● Wartości problematyczne
● Nie przepisuj testowanego
kodu!
● Pisz testowalny kod
Co i jak testować?
W mojej prywatnej opinii
export function toDate() {
const $input = $('input.date');
return moment($input.val(),
'YYYY-MM-DD',
true
);
}
32. 32
TDD
Po co nam to?
Technika tworzenia oprogramowania, zaliczana do metodyk zwinnych.
Pierwotnie była częścią programowania ekstremalnego (ang. extreme
programming), lecz obecnie stanowi samodzielną technikę. Polega na
wielokrotnym powtarzaniu kilku kroków:
● Najpierw programista pisze automatyczny test sprawdzający dodawaną
funkcjonalność. Test w tym momencie nie powinien się udać.
● Później następuje implementacja funkcjonalności. W tym momencie
wcześniej napisany test powinien się udać.
● W ostatnim kroku programista dokonuje refaktoryzacji napisanego kodu,
żeby spełniał on oczekiwane standardy.
WIKI
34. 34
TDD
Plusy
● nastawienie się na dobry design api naszych klas/metod
● 100% pokrycia testami
● wzrasta pewność zespołu
● brak strachu przed refaktoryzacją
● przyśpieszenie developmentu
WIKI
35. 35
TDD
Minusy
● Wymagana dobra znajomość dziedzinowa
● Łatwo utknąć w martwy punkcie
● Pisanie testów do rzeczy, które są na etapie refaktoryzacji usuwane
WIKI
36. 36
TDD
Kiedy idea się nie sprawdzi?
function compareTo(firstTeam, secondTeam) {
if (firstTeam.getGamesWon() > secondTeam.getGamesWon()) {
return 1;
}
else if (firstTeam.getGamesWon() < secondTeam.getGamesWon()) {
return -1;
}
return 0;
}
38. 38
● Test coverage
● Dobre praktyki: nowy bug = nowy test
Rzeczywistość
Jak to jest w prawdziwym życiu
39. 39
● Test coverage
● Dobre praktyki: nowy bug = nowy test
● Testujemy tylko proste rzeczy
Rzeczywistość
Jak to jest w prawdziwym życiu
40. 40
● Test coverage
● Dobre praktyki - nowy bug = nowy test
● Testujemy tylko proste rzeczy
● Testujemy po fakcie kod innych
developerów
Rzeczywistość
Jak to jest w prawdziwym życiu
41. 41
● Test coverage
● Dobre praktyki - nowy bug = nowy test
● Testujemy tylko proste rzeczy
● Testujemy po fakcie kod innych
developerów
● wszystko jest mockiem :)
Rzeczywistość
Jak to jest w prawdziwym życiu
42. 42
● Test coverage
● Dobre praktyki - nowy bug = nowy test
● Testujemy tylko proste rzeczy
● Testujemy po fakcie kod innych
developerów
● wszystko jest mockiem :)
● Piszemy nie testowalny kod
Rzeczywistość
Jak to jest w prawdziwym życiu