为什么在使用 Robolectric 时没有调用 PopupWindow.OnDismissListener?
How come PopupWindow.OnDismissListener is not called when using Robolectric?
我有问题。我想为依赖于 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 的生成代码,但也找不到任何内容。
谢谢!
我通常更喜欢使用对话框。要构建 AlertDialog,请使用 Developers 页面中的以下内容:
/ 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();
监听器没有被调用的原因是因为 Robolectric 的 ShadowPopupWindow 覆盖了默认实现并且根本没有调用它。
来自 source 的代码:
public void dismiss() {
if (context != null) {
getWindowManager().removeView(containerView);
}
showing = false;
}
根据您需要测试的内容,可能有一个有效的解决方法(上面的示例代码几乎只是测试 PopupWindow 的内部结构,我猜这并不是您真正想要实现的目标)。您也可以制作自己的 custom shadow,扩展这个,您可以在其中选择执行不同的行为。
我有问题。我想为依赖于 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 的生成代码,但也找不到任何内容。
谢谢!
我通常更喜欢使用对话框。要构建 AlertDialog,请使用 Developers 页面中的以下内容:
/ 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();
监听器没有被调用的原因是因为 Robolectric 的 ShadowPopupWindow 覆盖了默认实现并且根本没有调用它。
来自 source 的代码:
public void dismiss() {
if (context != null) {
getWindowManager().removeView(containerView);
}
showing = false;
}
根据您需要测试的内容,可能有一个有效的解决方法(上面的示例代码几乎只是测试 PopupWindow 的内部结构,我猜这并不是您真正想要实现的目标)。您也可以制作自己的 custom shadow,扩展这个,您可以在其中选择执行不同的行为。