2010-03-02 23 views
10

Bir ProgressDialog gösterecek ve her şey Uygulamada iyi bir şekilde çalışacak olan bir Activity testini denemeye çalışıyorum, ancak ActivityUnitTestCase'i kullanmaya çalıştığımda ve test başarısızlık iletişim kutusunun gösterilmesini sağladığında bu hata ile: sorunun bakıyordu ve biz varsayalım testi, onu oluşturmaya çalışın Etkinliğimi çöker onCreateDialog yöntemi başka bağlam gibi görünüyorAndroid 'deki Test iletişim kutusu ActivityUnitTestCase

android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
at android.view.ViewRoot.setView(ViewRoot.java:429) 
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:178) 
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
at android.view.Window$LocalWindowManager.addView(Window.java:392) 

, ben ancak, o olsun Merak ediyorum, böyle bir senaryoyu denemede başarılı oldunuz.

Bu, onCreateDialog'umun kodudur.

public Dialog onCreateDialog(final int id) 
{ 
    Dialog dialog; 
    switch (id) 
    { 
     case PROGRESS_BAR: 
      loadingDialog = new ProgressDialog(this); 
      loadingDialog.setMessage("searching for product..."); 
      loadingDialog.setIndeterminate(true); 
      dialog = loadingDialog; 
      break; 
     case INEXISTING_PRODUCT: 
      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setMessage("Product not found"); 
      builder.setPositiveButton("OK", null); 
      dialog = builder.create(); 
      break; 
     case UNAVAILABLE_SERVICE: 
      AlertDialog.Builder unavailableBuilder = new AlertDialog.Builder(this); 
      unavailableBuilder.setMessage("Service Unavailable"); 
      unavailableBuilder.setPositiveButton("OK", null); 
      dialog = unavailableBuilder.create(); 
      break; 
     default: 
      dialog = super.onCreateDialog(id); 
    } 
    return dialog; 
} 

Herhangi bir fikir?

cevap

2

Bunu yapmanın bir yolunu buluyorum, inanıyorum. Sorun, ActivityInstrumentationTestCase2'den genişletmek ve GUI iş parçacığıyla ilgili sorunları önlemek için bunu yapmam gerektiğiydi.

final Button uButton = (Button) activity.findViewById(R.id.btnSearchProduct); 
    activity.runOnUiThread(new Runnable() 
    { 
     public void run() 
     { 
      uButton.performClick(); 
     } 
    }); 

Tek sorum ben kontrol etmeliyim ki Aktivite ben indi ve onu ekstralar beri, sonuçları kontrol etmek nasıl?

+1

Hm, bu gerçekten bir çözüm değil mi? AITC2, ünite testleri değil, uçtan uca tüm testleri uygulamak için kullanılır. Bir ünite testinde diyalogları test etmenin neden iyi bir sebep göremiyorum. (PS: Aynı problemi yaşıyorum! AlertDialog.Builder'i kullanmama rağmen, test durumu dialog.show'da çöküyor) – Matthias

+0

Bir AUTC’in 'Dialog’u Dial Dialog’unu eklemek için gerçek bir Pencere’ye sahip olmadığını tahmin ediyorum. ; Enstrümansız bir testin çalıştığı 'İçerik 'gerçek değildir. Dialog'ların varlığını ve içeriğini doğrulamak için Robotium'u önerebilirim, ancak bu, aletli bir test vakasına bağlı. –

+2

Bu sorun, ActivityUnitTestCase http://code.google.com/p/android/issues/detail?id=14616 adresinde iletişim kutusu oluşturma ile ilgili sorunu izlemektir. – ThomasW