在Android的ActivityUnitTestCase中测试对话框

Mex*_*ker 10 android unit-testing

我正在尝试在android中测试一个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)
Run Code Online (Sandbox Code Playgroud)

我正在查看问题,当我们尝试从测试中创建它时,我的活动的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;
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Mex*_*ker 2

我相信我找到了办法。

问题是我需要从 ActivityInstrumentationTestCase2 进行扩展,并这样做以避免 GUI 线程出现问题。

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

我唯一的问题是如何检查结果,因为我需要检查我登陆的活动及其附加内容?

  • 此问题正在跟踪使用 ActivityUnitTestCase 创建对话框的问题 http://code.google.com/p/android/issues/detail?id=14616 (2认同)