问题描述
我有一个 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)