2011-07-05 116 views
6

我正在使用附加的行爲來爲我的代碼添加拖放功能。 到目前爲止,一切工作正常,但我的問題是當我想測試我的行爲類。wpf行爲單元測試

例如,行爲類中的一個會像下面這樣:

public class DroppableContainerBehavior: Behavior<FrameworkElement> 
{ 

     protected override void OnAttached() 
     { 
      base.OnAttached(); 

      AssociatedObject.AllowDrop = true; 
      AssociatedObject.Drop += new DragEventHandler(AssociatedObject_Drop); 
      AssociatedObject.DragOver += new DragEventHandler(AssociatedObject_DragOver); 
      AssociatedObject.DragLeave += new DragEventHandler(AssociatedObject_DragLeave); 

     } 


     private void AssociatedObject_Drop(object sender, DragEventArgs e) 
     { 
    ... 
    }   
} 

我現在的問題是,當我想以創建AssociatedObject_Drop方法的單元測試,我需要創建一個DragEventArgs對象,但這個類是封閉的。

我的印象是我做錯了什麼.. 我的問題是,我應該測試我的行爲類嗎?行爲與用戶界面相關,通常測試用戶界面並不值得。我對嗎? 也許我必須更改我的行爲代碼才能使其更易於測試?有任何想法嗎?

感謝您的幫助!

回答

4

我會重構代碼並將AssociatedObject_Drop中的任何業務邏輯轉移到它自己的函數中,然後爲這些函數編寫我的單元測試。

1
  1. 你甚至可以創建一個對象,它的類是封閉的。

  2. 可以通過提取其代碼與其他功能測試升高滴()事件在你的單元測試

  3. 您還可以測試AssociatedObject_Drop()方法的邏輯及寫功能單元測試。
+0

你知道我怎麼能創建一個對象,即使它的類是封閉的? –

+0

一個密封的類不能被繼承,但你可以創建這個類的一個實例。請參閱http://msdn.microsoft.com/en-us/library/88c54tsw%28v=vs.71%29.aspx – Arseny

+1

恩,對不起,新的DragEventArgs()不是密封的問題。我不能實例化它,因爲構造函數是內部的。 –