2011-07-05 34 views
6

Tôi đang sử dụng Hành vi được đính kèm để thêm chức năng kéo và thả vào mã của tôi. Cho đến nay, mọi thứ đều hoạt động tốt, nhưng vấn đề của tôi là khi tôi muốn kiểm tra các lớp hành vi của mình.kiểm tra đơn vị hành vi wpf

Ví dụ, một trong các lớp hành vi sẽ là một cái gì đó như sau:

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) 
     { 
    ... 
    }   
} 

vấn đề của tôi bây giờ là khi tôi muốn tạo một thử nghiệm đơn vị cho các phương pháp AssociatedObject_Drop, tôi sẽ cần phải tạo ra một DragEventArgs đối tượng, nhưng lớp này được niêm phong.

Tôi có ấn tượng rằng tôi đang làm điều gì đó sai .. Câu hỏi của tôi là, tôi có nên thử nghiệm các lớp hành vi của mình không? Hành vi có liên quan với giao diện người dùng và thường không đáng để kiểm tra giao diện người dùng. Tôi có đúng không? Có lẽ tôi phải thay đổi mã hành vi để làm cho nó dễ kiểm tra hơn? bất kỳ ý tưởng?

Cảm ơn sự giúp đỡ của bạn!

Trả lời

4

Tôi sẽ cấu trúc lại mã và di chuyển bất kỳ logic nghiệp vụ nào từ AssociatedObject_Drop thành (các) hàm riêng của nó và sau đó viết các kiểm tra đơn vị của tôi cho các hàm đó.

1
  1. bạn có thể tạo đối tượng ngay cả khi lớp của nó được niêm phong.

  2. bạn có thể kiểm tra tăng Drop() sự kiện trong đơn vị thử nghiệm của bạn

  3. bạn cũng có thể kiểm tra AssociatedObject_Drop() phương pháp logic bằng cách giải nén mã của nó với chức năng khác và viết các bài kiểm tra đơn vị cho chức năng này.
+0

và bạn có biết cách tôi có thể tạo đối tượng ngay cả khi lớp của nó được niêm phong không? –

+0

Không thể kế thừa một lớp được đóng kín nhưng bạn có thể tạo một thể hiện của lớp này. xem http://msdn.microsoft.com/en-us/library/88c54tsw%28v=vs.71%29.aspx – Arseny

+1

um, xin lỗi vấn đề khi thực hiện DragEventArgs mới() không được niêm phong. Tôi không thể khởi tạo nó vì hàm tạo là nội bộ. –