2013-05-22 13 views
15

Uygulamalarım çoğunlukla bilgilerinin çoğu için bir sunucuya iletişim sağlayan GUI'lerdir. Bir şey ters giderse, genellikle ağ çağrısı veya bir JSON nesnesi hakkında yanlış bir varsayımda bulunacaktır.neyin testi, android uygulamalarında

Birim Testleri, aksi halde denilen olmayacak birim testleri ve i/o ilgili görevleri ile ilgili bu ağ için iyi değildir.

SO ben benim durumumda Birim Testleri noktasını toplamaya çalışıyorum. Bir Android düğmesinin tıklayabileceğini veya bir EditText'in yazdığım şeyi görüp göremediğini neden test edeyim? Sadece bu yukarıdaki yöntem bütün faaliyetleri onCreate çalıştırmak sonra uygulama çalıştığını biliyorum ki, geçtiyseniz bu sıkıcı testleri

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); 
} 

ile uygulama yararını anlamıyorum. Bunun bir birim testi, yaratmak için gereksiz bir zaman alıcı şey olurdu. Zaman kaybetmek çünkü jUnit ve Android test çerçevesindeki tüm yöntemleri bilmiyorum.

Yani, uzun hikaye kısa, ne anlamı var? Bu testler hakkında düşünmem gereken belirli bir yol var mı? Şimdiye kadar gördüğüm tüm örnekler ve öğreticiler sadece basit örneklerden bahsediyorlar, kıskançlık uğruna, ama ağırlıklı olarak istemci-sunucu uygulamasında birim testleri için pratik kullanımları düşünemiyorum. Zaten ben ilan ve başlatılmamış biliyorum android görüşlerini erişerek keşfetmeye beklenen Neyim

? Öyle, içgörü

cevap

19

sorunuzu yönleri çok var takdir bir çok sınırlı bir şekilde

bu konuda düşünce olmalıdır, ama bence için - muhtemelen projenizde birim testleri gerekmez. projenize iş mantığı çok gerektiğinde

Birim testleri gerçekten parlıyor. Bu durumda, muhtemelen uygulamanızı çoklu katmanlara (örneğin, 3 katmanlı mimari) ayırmak, diğerlerinin yanı sıra, iş mantığı katmanı için bir miktar doğal yalıtım eklemek ve ünite testlerinin güvenlik ağı ile örtmek isteyebilirsiniz.

Bu güvenlik ağı, iş katmanının refraktörü sırasında eşinizi kapsar ve bu, ünite testlerinden (TDD'nin bazı güzel ekstra yan etkiler sunabilir) önemli olanlardan biridir.

Ancak, mal olabilir değil tüm tek boynuzlu ve gökkuşağı ve birim testi, ve bazen de çok maliyetli. İyi birim testleri izole edilir (yani küçük kod parçaları ile anlaşma). Bu, sınıflarınızı test altına almak için soyutlama katmanları eklemeniz gerektiği anlamına gelir. Bu, sisteminizde veya olumsuz durumunuzda olumlu etkilere neden olabilir. Katmanlama, karmaşıklığı artan maliyetle sisteminizi daha esnek hale getirir.

Belirtilene - birim testlerinin değeri, projenizde sunacağınız soyut iş mantığı miktarıyla orantılıdır. Bu şekilde de düşünebilirsiniz - eğer mimarinize soyut katmanlar eklemenin aşırı zorluğu varsa - birim testleri eklemeyin - sadece işleri daha karmaşık hale getirecek (mimari ve bilge). açıklamanızda dayanarak

- tipik uygulama bazı harici sunucu tarafı için oldukça fazla sunum katmanı olma eğilimindedir. Bu, android telefon hakkında bilgi sunma ve kullanıcı eylemlerini ana iş mantığının (kontrol) yapıldığı sunucu tarafına komutlar olarak dönüştürmek dışında pek bir şey yapmaz.

Bu yaklaşımla yazacağınız kodun büyük bir kısmı "bunun nasıl görüntüleneceğini" veya "nasıl ve bu durumda sunucuyu nasıl işaretleyeceğini" gösterir. Bu kod tür ağır platforma bağlı ve bu testin altında koymak istiyoruz eğer çok ve Android özgü kod \ davranışı çok alay gerekecek anlamına besbelli.

Şimdi, Android biraz spesifik bir platformdur. Hem performansın optimize edilmiş hem de geliştiricilerin hızlı bir şekilde uygulamaları başlatmasına ve üretmesine izin verecek şekilde tasarlanmıştır. Genellikle bu kullanılmasını \ uzatmak ve genel olarak bu kodu yazma, ama gerçek bir cehennem haline gelebilir bu sınıfları alay hızlandırır "swiss-bıçak" sınıfların bir miktar anlamına gelmektedir. Platformun kaputun altında nasıl çalıştığını anlamak zorunda olduğunuzu söylememelisiniz. Başka bir deyişle, bu testi yapmanın tepkisi yüksek olacak.

Sunu katmanlarını sınamada yanlış olan başka bir şey, iş katmanlarından çok daha dinamik olarak değişme eğiliminde olmalarıdır. Ve elbette, bu, daha fazla yükü ekleyen testleri tekrar gözden geçirmek zorunda kalacağınız anlamına gelir.

olsa çeşitli kamu/yardımcı sınıflar hakkında bir şey söylemek zorundayım. Bu sınıflar sunum katmanına ait olsa ve Android koduna bağlı olsalar da, bazı önemli olmayan mantıksal ve'u yapıp yapmadıkları bile olsa, bunlar için birim testleri yapmak ve yazmak çok kolaydır, aslında bunu yapmak iyi bir fikir olabilir. Ancak, böyle bir kodunuz varsa - bu, mimarinizi/katmanlarınızı iyi tasarlamadığınızı ve ne yaptığınızı yeniden düşünmeniz gerektiğini gösteren bir işaret olabilir. Sonunda

öncelikle bu sorulara cevap vermek zorunda soruna cevap vermek gerekirse:

o uygulamanıza platformdan ayrılır soyut katman eklemek için Aşırı tasarım olacak (o kitabın durumda gibi görünüyor) ? Evet ise - birim testleri kullanmayın - sadece sizi yavaşlatırlar. Eğer yoksa - bunları kullanın.

Çok fazla refactor yapacak mısın? Çok sayıda kod içeren ve dolayısıyla bakım gerektiren büyük bir proje varsa muhtemelen büyük olasılıkla, bu nedenle katmanlama ve birim testlerine yatırım yapabilirsiniz (ancak, bir bakışta, sizin durumunuz bu değildir). Bu sizin durumunuz değilse - ünite testleri ile uğraşmayın ve hızlı gidin.

Birim testlerinizi yazmak için çok fazla platformla uğraşmanız mı gerekiyor? Evetse (sizin durumunuz gibi) - ünite testleri yazmayın - çabaya değmezler.

Bu yardımcı olacaktır umarım.