如何强制 PopupWindow.dismiss() 同步调用,而不是稍后调度?

问题描述

我有一个 PopupWindow,它看起来就像您可以在 StackOverflow 上找到的任何示例 PopupWindow。

它有一个 .dismiss() 处理程序,看起来像任何解雇处理程序:

    reportPopup.setondismissListener( () -> {
        reportPopup = null;
        reportPopupHTML = null;
        reportWebView = null;
    } );

我对处理程序进行了测试,如下所示:

ma.reportPopup.dismiss();

//  assertNull(ma.reportPopupHTML);
//  assertNull(ma.reportPopup);
//  assertNull(ma.reportWebView);

注意注释标记;断言失败是因为他们认为弹出窗口仍然存在。

我的一些其他 PopupWindows 同步关闭,所以我的类似断言通过了,但这个断言失败了。随意要求更多代码,但这都是普通的Android。一般的问题是什么可以使 .dismiss() 调度处理程序,而不是仅仅解除并立即调用其回调?

你猜怎么着?生产代码没有问题。


测试设备是 Espresso,大多数 Espresso 功能关闭(因为我的测试尝试将视图对象视为对象),并且大多数测试用例以 @UiThreadTest 开头

解决方法

您可能需要在开始断言之前添加一些延迟,例如 Thread.sleep(1000)