0

我想單元測試與我的AppBarLayout上設置自定義DragCallback的行爲。 有一個設置dragCallback但不是getter方法的設置方法。如何檢查AppBarLayout.Behavior dragCallback是否已設置?

AppBarLayout.Behavior behavior = new AppBarLayout.Behavior(); 
behavior.setDragCallback(new AppBarLayoutCustomCallback()); 

有沒有辦法訪問appbarlayout.behavior的dragCallback?

回答

0

我結束了分解行爲和單元測試和驗證setDragCallBack創建被稱爲我的自定義行爲的回調

protected AppBarLayout.Behavior createBehaviorWithCallBack(AppBarLayout.Behavior behavior) { 
    behavior.setDragCallback(new MyCustomCallback()); 
    return behavior; 
} 

和單元測試

assertNotNull(behavior); 
verify(behavior).setDragCallback(any(MyCustomCallback.class)); 
0

您可以使用反射來獲取DragCallback字段窗體AppBarLayout的行爲。這個領域是私人的,吸氣劑不可用,可能不會扭曲行爲。

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));

相關問題