2010-03-02 59 views
10

我想测试一个活动在android中会显示ProgressDialog和一切工作正常在应用程序,但是当我尝试使用ActivityUnitTestCase和测试导致活动显示对话框失败与此错误:在Android的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) 

我一直在寻找这个问题,似乎我的活动崩溃的onCreateDialog方法,当我们试图从测试,我假设创建它是另一种情况下,我得到的,然而,我想知道你们中的任何一个人在尝试这种情况下是否成功。

这是我的onCreateDialog的代码。

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

任何想法?

回答

2

我觉得我找到了一个办法。

问题是我需要从ActivityInstrumentationTestCase2扩展,并且这样做是为了避免GUI线程出现问题。

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

我唯一的问题是如何检查结果,因为我需要检查哪些活动我着陆和它是额外的?

+1

嗯,这不是一个真正的解决方案吗? AITC2用于实现完整的端到端测试,而不是单元测试。我没有看到有什么好的理由说明为什么一个人不能在单元测试中测试对话框。 (PS:我有同样的问题!虽然我使用AlertDialog.Builder,测试用例在dialog.show中崩溃) – Matthias 2011-02-08 16:37:03

+0

我猜测AUTC没有真正的'Window'来附加'Dialog'到;运行非仪器化测试的'Context'不是真实的。我可以推荐Robotium确认Dialogs的存在和内容,但是这取决于仪器测试用例。 – 2011-02-08 22:50:22

+2

此问题正在跟踪使用ActivityUnitTestCase http://code.google.com/p/android/issues/detail?id=14616创建对话框的问题 – ThomasW 2011-10-04 10:44:16