android - 为什么在使用 Robolectric 时不调用 PopupWindow.OnDismissListener?

标签 android robolectric android-popupwindow

我有一个问题。我想为依赖于执行 PopupWindow.OnDismissListener.onDismiss() 方法的代码编写测试。但是,它似乎从未被调用过。我做错了什么吗?

示例代码:

View content = new View(Robolectric.application);
PopupWindow popup = new PopupWindow(content, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
popup.setOnDismissListener(new PopupWindow.OnDismissListener() {
        @Override
        public void onDismiss() {
            Assert.fail();
        }
});
View anchor = new View(Robolectric.application);
popup.showAsDropDown(anchor);
popup.dismiss();

上面的测试永远不会失败!之后我尝试添加一个小 sleep ,以防出现一些时间问题。 我查看了为 PopupWindow.class 生成的代码,但也没有找到任何内容。

谢谢!

最佳答案

监听器没有被调用的原因是 Robolectric 的 ShadowPopupWindow 覆盖了默认实现并且根本没有调用它。

代码来自 source :

  public void dismiss() {
    if (context != null) {
      getWindowManager().removeView(containerView);
    }
    showing = false;
  }

根据您需要测试的内容,可能有一个有效的解决方法(上面的示例代码几乎只是测试 PopupWindow 的内部结构,我猜这并不是您真正想要实现的目标)。你也可以自己制作 custom shadow , 扩展这个,你可以选择做不同的行为。

关于android - 为什么在使用 Robolectric 时不调用 PopupWindow.OnDismissListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28234233/

相关文章:

android - 通过在外部单击可以关闭 PopupMenu 的方式关闭 PopupWindow

android - 从android中的手机内存中读取文本文件

android - Google Analytics - 测试中的 NullPointerException

java - Robolectric 3.0 - java.lang.NoClassDefFoundError : android/support/v7/appcompat/R$styleable when testing library module

android - Robolectric buildActivity() 与 Mockito spy ?

Android Nougat 7.1.1 showAtLocation(...)重力不起作用

android - MIUI中如何开启Draw Overlay权限弹窗?

android - announceforaccessibility 不起作用

android seekbar 在方向改变时的绘图问题

java - Android:从 GLSurfaceView 返回到主要 Activity