如何检查 AppBarLayout.Behavior dragCallback 是否已设置?
How to check AppBarLayout.Behavior dragCallback was set?
我正在尝试单元测试自定义 DragCallback 的行为是在我的 AppBarLayout 上设置的。
有一个用于设置 dragCallback 的 set 方法,但没有 getter 方法。
AppBarLayout.Behavior behavior = new AppBarLayout.Behavior();
behavior.setDragCallback(new AppBarLayoutCustomCallback());
有什么方法可以访问 appbarlayout.behavior 的 dragCallback 吗?
您可以使用反射获取 AppBarLayout 的 DragCallback
字段表单行为。该字段是私有的,getter 不可用可能不会扭曲行为。
private AppBarLayout.Behavior.DragCallback getDragCallback(AppBarLayout appBarLayout){
CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
CoordinatorLayout.Behavior behavior = layoutParams.getBehavior();
if(behavior != null){
try {
Field mDragCallbackField = behavior.getClass().getDeclaredField("mDragCallback");
mDragCallbackField.setAccessible(true);
AppBarLayout.Behavior.DragCallback dragCallback = (AppBarLayout.Behavior.DragCallback) mDragCallbackField.get(behavior);
return dragCallback;
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return null;
}
然后 assertNotNull(getDragCallback(mAppBarLayout))
;
我最终分解了行为的创建和单元测试,并验证了 setDragCallBack 是用我的自定义行为回调调用的
protected AppBarLayout.Behavior createBehaviorWithCallBack(AppBarLayout.Behavior behavior) {
behavior.setDragCallback(new MyCustomCallback());
return behavior;
}
和单元测试
assertNotNull(behavior);
verify(behavior).setDragCallback(any(MyCustomCallback.class));
我正在尝试单元测试自定义 DragCallback 的行为是在我的 AppBarLayout 上设置的。 有一个用于设置 dragCallback 的 set 方法,但没有 getter 方法。
AppBarLayout.Behavior behavior = new AppBarLayout.Behavior();
behavior.setDragCallback(new AppBarLayoutCustomCallback());
有什么方法可以访问 appbarlayout.behavior 的 dragCallback 吗?
您可以使用反射获取 AppBarLayout 的 DragCallback
字段表单行为。该字段是私有的,getter 不可用可能不会扭曲行为。
private AppBarLayout.Behavior.DragCallback getDragCallback(AppBarLayout appBarLayout){
CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
CoordinatorLayout.Behavior behavior = layoutParams.getBehavior();
if(behavior != null){
try {
Field mDragCallbackField = behavior.getClass().getDeclaredField("mDragCallback");
mDragCallbackField.setAccessible(true);
AppBarLayout.Behavior.DragCallback dragCallback = (AppBarLayout.Behavior.DragCallback) mDragCallbackField.get(behavior);
return dragCallback;
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return null;
}
然后 assertNotNull(getDragCallback(mAppBarLayout))
;
我最终分解了行为的创建和单元测试,并验证了 setDragCallBack 是用我的自定义行为回调调用的
protected AppBarLayout.Behavior createBehaviorWithCallBack(AppBarLayout.Behavior behavior) {
behavior.setDragCallback(new MyCustomCallback());
return behavior;
}
和单元测试
assertNotNull(behavior);
verify(behavior).setDragCallback(any(MyCustomCallback.class));