我正在尝试在android中测试一个 Activity ,该 Activity 将显示一个ProgressDialog,并且在App中一切正常,但是,当我尝试使用ActivityUnitTestCase并测试导致该 Activity 显示对话框时,它会失败并显示此错误:
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)
我正在查看问题,当我们尝试从测试中创建 Activity 时,似乎 Activity 的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;
}
有任何想法吗?
最佳答案
我相信,我找到了一种方法。
问题是我需要从ActivityInstrumentationTestCase2进行扩展,并且还要这样做以避免GUI线程出现问题。
final Button uButton = (Button) activity.findViewById(R.id.btnSearchProduct);
activity.runOnUiThread(new Runnable()
{
public void run()
{
uButton.performClick();
}
});
我唯一的问题是如何检查结果,因为我需要检查我登陆了哪个 Activity 及其附加功能?