konferencji Mobilization.pl w odzi Programista aplikacji mobilnych w rmie Mobica Prawie 3 lata do±wiadczenia w j2me Ponad 1 w Androidzie Animator JUG ód¹ http://info.lodz.jug.pl Chciaªby pisa¢ bloga: Blog programisty Android http://blogprogramistyandroid.blogspot.com Marek Defeci«ski Testowanie w systemie Android
testowa¢, o to jest pytanie? Nie wa»ne jak, ale wa»ne »eby testowa¢ Jednostkowo / Funkcjonalnie / Integracyjne Manualnie / Automatycznie Wydajno±ciowo Marek Defeci«ski Testowanie w systemie Android
poprawno±¢ kodu Czy robi to co chcemy? Wykrywamy bª¦dy Zwi¦kszaj¡ jako±¢ kodu czy kod jest u»ywalny (ªatwo go testowa¢)? czy jest moduªowy? ªatwo si¦ integruje Testowanie skutkuje lepszym designem Marek Defeci«ski Testowanie w systemie Android
to kontrakt na pi±mie rodzaj dokumentacji (samodokumentuj¡cy si¦ kod) lista przykªadów istniej¡ce testy pozwalaj¡ na wykrycie bª¦dów regresji Marek Defeci«ski Testowanie w systemie Android
Anatomia testowania Aplikacje w androidzie zorganizowane s¡ w paczki (Android PacKage) Test w Androidzie to te» paczka (apk) Paczki w Androidzie nie maj¡ dost¦pu do swojego kodu (security) Testowanie u»ywa instrumentacji dzi¦ki której test i aplikacja testowana pracuj¡ w tym samym procesie warunek: podpisane s¡ tym samym kluczem Uwazamy na biblioteki w te±cie i aplikacji testowanej - nie mog¡ si¦ powtarza¢ (Conversion to Dalvik format failed lub bª¦dy w czasie wykonania) Uprawnienia (permissions) s¡ takie jak dla aplikacji testowanej Marek Defeci«ski Testowanie w systemie Android
Zastosowanie Testy jednostkowe - wolne (kompilacja, dex, aapt, adb install) jeszcze wolniej (emulator) po co w ogóle testowa¢ to na urz¡dzeniu/emulatorze? Testy funkcjonalne tak samo wolno trudno napisa¢ / przeczyta¢ / utrzyma¢ Marek Defeci«ski Testowanie w systemie Android
android.test.* android.test.InstrumentationTestCase umo»liwia korzystanie z instrumentacji symulowanie wci±ni¦cia klawiszy testowanie metod »ycia activity (onStart, onCreate) android.test.ActivityInstrumentationTestCase2 najcz¦±ciej u»ywana klasa getActivity() - zaªatwia za nas startowanie android.test.ServiceTestCase przetestowa¢ cykl »ycia serwisu (onBind...) Marek Defeci«ski Testowanie w systemie Android
To nie jest mocking framework typu mockito lub easymock Bardziej zbli»one do denicji stubów (M. Fowler) To klasy których: metody rzucaj¡ wyj¡tkami nadpisujemy metody które chcemy u»y¢ Sªu»¡ izolacji od ±rodowiska MockContext MockContentProvider (baza danych) MockContentResolver (j.w.) atwiej co± wstrzykn¡¢ Niespecjalnie przydatne Marek Defeci«ski Testowanie w systemie Android
i Monkeyrunner Monkey wysyªanie losowych eventów (klawiatura, mysz, rotacja) tryb serwera (oczekiwanie na polecenia tekstowe) tryb skryptów dokumentacja w kodzie ¹ródªowym SDK Monkeyrunner python/jython umo»liwia startowanie activity wysyªanie eventów (klawiatura, mysz) screenshoty mo»na nagra¢ test u»ywaj¡c recorder-a (w kodzie sdk) szukaj help.py w kodzie ¹ródªowym SDK Marek Defeci«ski Testowanie w systemie Android
Jak Selenium, ale dla Android Testy typu black box nie wymagaj¡ kodu aplikacji testowanej (ale mog¡) Testy przyjazne w dotyku - pro±ciej ni» instrumentacja zgrabne API ªatwo si¦ pisz¦ ªatwo si¦ czyta Du»e i aktywne community i regularne release-y (3.0 w listopadzie, 3.1 w styczniu) Marek Defeci«ski Testowanie w systemie Android
Jak Selenium, ale dla Android Testy typu black box nie wymagaj¡ kodu aplikacji testowanej (ale mog¡) Testy przyjazne w dotyku - pro±ciej ni» instrumentacja zgrabne API ªatwo si¦ pisz¦ ªatwo si¦ czyta Du»e i aktywne community i regularne release-y (3.0 w listopadzie, 3.1 w styczniu) Wady limit 1 aplikacji na test, przej±cie do innej aplikacji (np. sms) ko«czy test (limit instrumentacji) mo»e i ªadniej, ale wcale nie szybciej zmiany UI = zmiany testów Marek Defeci«ski Testowanie w systemie Android
recorder BitBar - http://testdroid.com/ Plugin do eclipse Nagrywanie testów, wynikiem s¡ testy robotium testy monkeyrunner Pªatny Marek Defeci«ski Testowanie w systemie Android
java.lang.RuntimeException: Stub! android.jar - fasada potrzebna do kompilacji Testy uruchamiane w zwykªej Javie Szybkie! Typu black-box atwo zrefaktorowa¢ atwo osi¡gn¡¢ du»e pokrycie testami bo szybko si¦ pisze i szybko uruchamia Maven (out of the box) atwe mockowanie http Robolectric.addPendingHttpResponse(...) Marek Defeci«ski Testowanie w systemie Android
Prawdziwe Selenium Testujemy stron¦ internetow¡, ale w Androidzie Dwa tryby u»ycia Zdalny serwer WebDriver Testy na ho±cie Dowolny j¦zyk programowania Ten sam test u»ywasz do innych przegl¡darek Testy androidowe (instrumentacja) - SDK Extras Testy na androidzie Dziaªa szybciej Marek Defeci«ski Testowanie w systemie Android
http://code.google.com/p/nativedriver/ Reusability Robimy to samo co Selenium: klikamy, wpisujemy tekst, zmieniamy okna (activity) Wszyscy znaj¡ Selenium to u»yjmy to API jeszcze raz Obsªuguje wiele platform (iPhone/Windows) Test po stronie hosta Serwer po stronie aplikacji Marek Defeci«ski Testowanie w systemie Android
http://code.google.com/p/nativedriver/ Reusability Robimy to samo co Selenium: klikamy, wpisujemy tekst, zmieniamy okna (activity) Wszyscy znaj¡ Selenium to u»yjmy to API jeszcze raz Obsªuguje wiele platform (iPhone/Windows) Test po stronie hosta Serwer po stronie aplikacji Wymaga doª¡czenia jar-a do aplikacji I zmiany kilku permissions Marek Defeci«ski Testowanie w systemie Android
ant maven Integracja z Hudson/Jenkins https://wiki.jenkins- ci.org/display/JENKINS/Android+Emulator+Plugin Emulator w trybie headless (-no-window) Snapshots http://tools.android.com/recent/emulatorsnapshots Monkey Marek Defeci«ski Testowanie w systemie Android