2008-09-24 20 views
5

Có ai có thể thử nghiệm thành công các phương thức được, bởi sự cần thiết, kết hợp với lớp System.Windows.Forms.Form không?Làm thế nào tôi có thể viết một bài kiểm tra đơn vị cho một lớp điều khiển sử dụng winforms cho các khung nhìn?

Gần đây tôi đã làm việc trên một ứng dụng C# winforms, cố gắng xây dựng nó với cấu trúc MVC. Điều này là khó khăn đủ, cho rằng khuôn khổ không thực sự được xây dựng với điều này trong tâm trí.

Tuy nhiên, nó thậm chí còn khó khăn hơn khi bạn ném thử nghiệm đơn vị vào hỗn hợp. Tôi đã đảm bảo rằng các bộ điều khiển của tôi không được kết hợp với các lớp xem cụ thể, để tôi có thể sử dụng một bài/thử nghiệm để kiểm thử đơn vị. Nhưng tham khảo các lớp Form một nơi nào đó là không thể tránh khỏi, và những phương pháp này cần phải được kiểm tra.

Tôi đã sử dụng Moq vì nó có một số tính năng an toàn kiểu tốt đẹp và cho phép các loại bê tông mocking. Nhưng thật không may, nó không cho phép tôi "mong đợi" các cuộc gọi đến các phương thức hoặc thuộc tính trên một loại cụ thể không phải là ảo hay trừu tượng. Và kể từ khi lớp Form không được xây dựng với subclassing trong tâm trí, đây là một vấn đề lớn. Tôi cần để có thể giả lập các lớp Form để ngăn chặn các cửa sổ thực sự được tạo ra, bởi "mong đợi" ShowDialog, ví dụ.

Vì vậy, tôi không thể chạy bất kỳ thử nghiệm đơn vị nào tương tác nhiều với các lớp con của Biểu mẫu mà chế độ xem của tôi là.

Có ai ngoài kia đã thử nghiệm thành công loại mã này không? Bạn đã làm nó như thế nào?

Đây có phải là thứ mà các khuôn khổ giả mạo khác có thể tham gia không? Các phương pháp dựa trên chuỗi có được sử dụng bởi các khuôn khổ mocking khác phải chịu các ràng buộc giống nhau không? Tôi có thể viết các lớp mô hình dài tay rõ ràng của riêng mình, hoặc việc thiếu các thành viên ảo có ngăn cản tôi có thể ngăn chặn hành vi của cửa sổ theo cách đó không? Hoặc có cách nào đó tôi chưa nghĩ đến việc cấu trúc các lớp của tôi sao cho mã kết hợp Biểu mẫu kết thúc bằng các phương thức và các lớp phức tạp tầm thường, sao cho tôi có thể lấy đi mà không kiểm tra đơn vị chúng một cách rõ ràng, mà không có lương tâm đánh tôi vì nó?

Trả lời

3

Phương pháp tốt nhất mà tôi đã nghe/sử dụng để thử nghiệm đơn vị với các phần tử GUI là mẫu/phương pháp Humble Dialog. Về bản chất, các biểu mẫu chỉ là giao diện và tất cả công việc thực tế được thực hiện trong các lớp khác. Bạn kiểm tra các lớp cung cấp các chức năng, và sau đó chỉ cần kết nối các sự kiện GUI của bạn với các phương thức thích hợp trong các lớp đó.

0

Suy nghĩ hiện tại của tôi là tôi có thể phải sử dụng bố cục hơn là kế thừa với lớp Biểu mẫu, để tách các bộ điều khiển khỏi nó.

Điều này có bất lợi là mỗi lần tôi cần sử dụng một thành viên của lớp Biểu mẫu mà tôi không có kế hoạch, tôi cần phải thêm nó một cách rõ ràng vào giao diện xem của tôi.

+0

Điều này không cần thiết, bởi vì việc lập kế hoạch tốt nên điều này không xảy ra thường xuyên. Và nếu đây là mức giá đáng tin cậy, và mã được thử nghiệm tốt, tôi coi nó là một mức giá thấp. –

Các vấn đề liên quan