3

我有个问题。我想为依赖于 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();

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

谢谢!

4

2 回答 2

0

我通常更喜欢使用对话框。要构建 AlertDialog,请使用以下开发人员页面中的内容:

/ 1. Instantiate an AlertDialog.Builder with its constructor 
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

// 2. Chain together various setter methods to set the dialog characteristics 
builder.setMessage(R.string.dialog_message)
       .setTitle(R.string.dialog_title);

// 3. Get the AlertDialog from create() 
AlertDialog dialog = builder.create();
于 2015-01-30T10:56:00.873 回答
0

不调用侦听器的原因是来自 Robolectric 的 ShadowPopupWindow 覆盖了默认实现并且根本不调用它。

代码:

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

根据您需要测试的内容,可能有一个有效的解决方法(您上面的示例代码几乎只是测试 PopupWindow 的内部,我猜这不是您真正想要实现的)。您还可以制作自己的自定义阴影,扩展此阴影,您可以在其中选择执行不同的行为。

于 2015-01-30T14:40:05.090 回答