2013-05-22 7 views
15

Moje aplikacje to głównie interfejsy graficzne, które komunikują się z serwerem w celu uzyskania większości informacji. Jeśli coś pójdzie nie tak, zwykle będzie to połączenie sieciowe lub błędne założenie dotyczące obiektu JSON.Co do testu urządzenia, w aplikacjach dla Androida

Testy jednostkowe nie są dobre dla zadań związanych z siecią i związanych z urządzeniem i/lub, w przeciwnym razie nie będą nazywane testami jednostkowymi.

W związku z tym próbuję zebrać punkt testów jednostkowych w moim przypadku. Dlaczego miałbym testować, czy przycisk Androida może kliknąć, czy EditText może zobaczyć, co wpisuję? Ja po prostu nie rozumiem użyteczność implementating tych żmudnych testów

private void initElements(){ 
    placeButton = (Button) findViewById(R.id.currplace); 
    placeButton.setText(MainActivity.this.getString(R.string.findingLocation)); 
    placeButton.setEnabled(false); 
    selectplaceLayout = (LinearLayout)findViewById(R.id.selectplaceLayout); 
    selectplaceLayout.setVisibility(View.GONE); 
    splash = (RelativeLayout)findViewById(R.id.splashbg); 
    infoLayout = (LinearLayout)findViewById(R.id.infoLayout); 
} 

jeśli ta powyższa metoda minęło, który wszystkie moje działania prowadzone w onCreate, wtedy wiem, prace aplikacji. Test jednostkowy tego byłby zbytecznym, czasochłonnym zadaniem do stworzenia. Czasochłonne, ponieważ nie jestem zaznajomiony ze wszystkimi metodami w ramach testowania jUnit i Android.

Krótko mówiąc, o co chodzi? Czy jest jakiś szczególny sposób, w jaki powinienem myśleć o tych testach? Wszystkie przykłady i samouczki, które do tej pory widziałem, mówią o najprostszych przykładach, ze względu na zwięzłość, ale nie mogę wymyślić żadnych praktycznych zastosowań testów jednostkowych w przeważającej aplikacji klient-serwer.

Czego spodziewałem się odkryć, uzyskując dostęp do widoków Androida, które już wiem, zadeklarowałem i zainicjowałem? Muszę myśleć o tym za zbyt ograniczony sposób

tak, wgląd docenione

Odpowiedz

19

Istnieje wiele aspektów w swoim pytaniu, ale moim zdaniem - prawdopodobnie nie potrzebują testów jednostkowych w projekcie.

Testy jednostkowe naprawdę świecą, gdy potrzebujesz dużej logiki biznesowej do swojego projektu. W tym przypadku prawdopodobnie chcesz podzielić swoją aplikację na wiele warstw (np. Architektura trójwarstwowa), aby między innymi dodać naturalną izolację dla warstwy biznesowej i pokryć ją siatką bezpieczeństwa testów jednostkowych.

Ta siatka zabezpieczająca zakrywa osły podczas refaktoryzacji warstwy biznesowej, a to jedna z głównych rzeczy, które można uzyskać dzięki jednostkowym testom (TDD może zaoferować kilka fajnych dodatkowych efektów ubocznych).

Jednak nie wszystkie jednorożce i tęcze i koszt jednostkowy mogą być kosztowne, a czasami kosztują dużo. Dobre testy jednostkowe są izolowane (tj. Zajmują się małymi porcjami kodu). Oznacza to, że musisz dodać warstwy abstrakcji, aby wystawić swoje klasy na próbę.

Może to mieć pozytywny wpływ na system lub negatywny. Warstwy zwiększają elastyczność systemu i zwiększają jego złożoność.

Mając to powiedziane - wartość testów jednostkowych jest proporcjonalna do ilości abstrakcyjnej logiki biznesowej, którą zamierzasz wprowadzić w projekcie. Możesz pomyśleć o tym również w ten sposób - jeśli przesadzasz z dodawaniem abstrakcyjnych warstw do architektury - nie dodawaj testów jednostkowych - tylko sprawią, że rzeczy będą bardziej skomplikowane (architektura i budowa).

Na podstawie Twojego opisu - Twoja typowa aplikacja to zazwyczaj warstwa prezentacji dla niektórych zewnętrznych serwerów. To niewiele, z wyjątkiem prezentacji informacji na temat telefonu z Androidem i przekształcenia działań użytkownika na polecenia po stronie serwera, gdzie główna logika biznesowa zostaje wykonana (kontrolowanie).

Dzięki takiemu podejściu większość kodu, który prawdopodobnie napiszesz, jest związana z "jak wyświetlić to i tamto" lub "jak sygnalizować serwer w tym i tamtym przypadku". Ten rodzaj kodu jest oczywiście mocno zależny od platformy, a to oznacza, że ​​jeśli chcesz poddać go testowi, będziesz musiał sfałszować wiele specyficznych dla Androida zachowań kodowych.

Android to nieco specyficzna platforma. Został zaprojektowany z myślą o optymalizacji wydajności i pozwala programistom szybko uruchamiać i produkować aplikacje. Często oznacza to pewną liczbę klas "swiss-knife", których używasz \ extensywnie i ogólnie to przyspiesza pisanie kodu, ale kpiny z tych klas mogą stać się prawdziwym piekłem. Nie wspominając już o tym, że musisz zrozumieć, w jaki sposób platforma działa pod maską, aby te kpiny były przydatne. Innymi słowy narzut z przeprowadzania testów będzie wysoki.

Inną wadą testowania warstw prezentacji jest to, że zmieniają się one znacznie dynamiczniej niż warstwy biznesowe. I, oczywiście, oznacza to, że będziesz musiał refaktoryzować testy, które zwiększają dodatkowe koszty.

Muszę powiedzieć jedną rzecz o różnych klasach użytkowych/pomocniczych. Nawet jeśli te klasy należą do warstwy prezentacji i zależą od kodu Androida, ale wykonują trochę nietrywialną logikę, łatwo jest im udawać i pisać testy jednostkowe, może to jednak być dobry pomysł. Jeśli jednak masz dużo takiego kodu - może to być sygnał, że nie zaprojektowałeś dobrze architektury/warstwy, i musisz przemyśleć to, co robisz.

W końcu, aby odpowiedzieć na to pytanie trzeba odpowiedzieć na te pytania pierwsze:

Będzie ona overdesign dodać abstrakcyjnej warstwy, który jest oddzielony od platformy dla aplikacji (wydaje się, że w twoim przypadku to będzie) ? Jeśli tak - nie używaj testów jednostkowych - spowolnią cię tylko. Jeśli nie - używaj ich.

Czy zamierzasz dużo refaktoryzować? Jeśli to duży projekt z dużą ilością kodu, a tym samym konserwacja - prawdopodobnie tak, więc zainwestuj w warstwowanie i testy jednostkowe (ale na pierwszy rzut oka wydaje się, że to nie jest twój przypadek). Jeśli tak nie jest - nie przejmuj się testami jednostkowymi i idź szybko.

Czy trzeba naśmiewać się z platformy, aby napisać testy jednostek? Jeśli tak (wydaje się być twoim przypadkiem) - nie pisz testów jednostkowych - nie warte wysiłku.

Mam nadzieję, że to pomoże.

Powiązane problemy