2012-01-11 18 views
6

Android'de actionbar öğeleri için junit test vakalarını nasıl yazarım? Tıklama etkinliklerini gerçekleştirmek için referansını almanın herhangi bir yolu var mı?Android'de Junit testi için Actionbar öğeleri için bir referans almak için herhangi bir yolu?

+0

benim İşlem Çubuğu Liste-Navigasyon test etmek isterken aynı sorun yaşıyorsunuz. –

+0

Aslında Android'de normal referanslar aldığınız ile aynıdır, akılda tutulması gereken tek şey testlerin farklı bir isim alanında çalışmasıdır, bu yüzden orijinal uygulamanın tam ad alanını kullanmanız gerekir. – gipi

cevap

0

Kendi özel MenuItem sınıfımı oluşturarak ve Elle etkinlik için onOptionsItemSelected (MenuItem öğesini) çağırarak çözdüm. Junit testi için bunu yapmanın başka bir yolu var mı?

0

ActionBarSherlock tarafından sağlanan bir ActionBar kullanıyorum ve bu soruna rastladım. Bunu yapmak için bulduğum en iyi yoludur: Test etkinlikte

  1. onCreateOptionsMenu geçirilen Menü nesnesinin bir örneğini korumak ve test durumda bu erişilebilir hale. Test durumda
  2. Eğer id ederek Menuıtem seçmek için izin Gereçleri başvuru ve Menü gerekir:

    private void clickOnMenuItem(int menuItemId, Instrumentation instruments, Menu menuInstance) { 
    final Integer itemId = menuItemId; 
    final Menu menu = menuInstance; 
    instruments.runOnMainSync(new Runnable() { 
        @Override 
        public void run() { 
         menu.performIdentifierAction(itemId, 0); 
        } 
    }); 
    

    }

3

Bir İşlem Çubuğu öğesini tıklatarak simüle edebilirsiniz şunun gibi:

public void testButton(){ 
    final View view = activity.findViewById(com.example.R.id.button1); 
    activity.runOnUiThread(new Runnable() { 

     @Override 
     public void run() { 
      view.requestFocus(); 
      view.callOnClick(); 
     } 
    }); 
} 
+0

sadece bir gözlem: 'callOnClick()', Api level 15'te eklenmiştir, bu yüzden daha eski sürümlerde mevcut değildir. Bir alternatif 'performClick()' dır. – gipi

1

Aşağıdaki örnekte, gezinme sekmesi düğmesi düğmesini alabiliyorum. f eylem çubuğu (yerel veya ActionBarSherlock). Sonra ben TouchUtils.clickView() ile onlara tıklayın:

try { 

// Trying to get the ActionBar view '@id/android:action_bar_container' dynamically 
int resId = 
a.getResources().getIdentifier("action_bar_container", "id", "android"); 
View actionBarContainer = a.findViewById(resId); 

// The class 'com.android.internal.widget.ActionBarContainer' must be in 
// the classpath of this test project to be able to call 
// the method 'getTabContainer' at runtime 
Method getTabContainer = 
com.android.internal.widget.ActionBarContainer.class.getMethod("getTabContainer", 
(Class<?>[]) null); 

HorizontalScrollView tabContainer = 
(HorizontalScrollView) getTabContainer.invoke(actionBarContainer, (Object[]) null); 
return ((ViewGroup) tabContainer.getChildAt(0)).getChildAt(tabIndex); 

} catch (Exception e) { 

// Trying with SherlockActionBar 
com.actionbarsherlock.internal.widget.ActionBarContainer actionBarContainer = 
(com.actionbarsherlock...) a.findViewById(R.id.abs__action_bar_container); 

HorizontalScrollView tabContainer = 
(HorizontalScrollView) actionBarContainer.getTabContainer(); 
return ((ViewGroup) tabContainer.getChildAt(0)).getChildAt(tabIndex); 

} 
} 
+0

Görünüm hiyerarşisine göz atarken benzer bir fikrim var ve paket adı nedeniyle sorun yaşıyordum, android adı harika çalışıyor, teşekkürler. Ayrıca, not uygulaması üzerinde bazı görüşleriniz varsa, bunlara da bu şekilde erişebilirsiniz, sadece doğru paket adını bulun. Görünüşe göre Bildirim çubuğu öğelerine de bu şekilde ulaşabilirsiniz. – PSIXO

1

kullanım robotium.jar kütüphanesi

import com.jayway.android.robotium.solo.Solo; 

private Solo solo; 
this.solo = new Solo(getInstrumentation(),getActivity()); 
//R.id.menu_action_signup Menu Iten id. 
this.solo.clickOnView(this.solo.getView(R.id.menu_action_signup)); 
İlgili konular