2010-05-20 28 views
5

Tôi hiện đang cố gắng nắm bắt MSpec, chủ yếu là học các cách mới (T/B) DD để có thể đưa ra quyết định được giáo dục về công nghệ sử dụng. Trước đây, tôi đã chủ yếu (chỉ đọc:) sử dụng khung MSTest được xây dựng sẵn với Moq, vì vậy BDD khá mới mẻ đối với tôi.Thử nghiệm ActionFilterThuộc tính với MSpec

Tôi đang viết một ứng dụng ASP.NET MVC và tôi muốn triển khai PRG. Thời gian qua tôi đã làm điều này, tôi đã sử dụng bộ lọc hành động để xuất và nhập ModelState qua TempData, để tôi có thể trả lại RedirectResult và lỗi xác thực vẫn sẽ ở đó khi người dùng có chế độ xem. Tôi đã thử nghiệm kịch bản đó bằng cách kiểm tra hai điều:

a) Đó là ExportModelStateAttribute tôi đã viết được áp dụng (trong số những thử nghiệm về điều khiển của tôi)
b) Đó là các thuộc tính làm việc (trong số kiểm tra cho bộ lọc hành động thuộc tính)

Tuy nhiên, trong BDD tôi đã hiểu rằng tôi thậm chí phải quan tâm nhiều hơn đến hành vi, và thậm chí ít hơn với việc thực hiện. Điều này có nghĩa là tôi có lẽ chỉ nên xác minh rằng trạng thái mô hình là trong tempdata khi hành động đã thực hiện xong - không nhất thiết là nó được thực hiện thông qua một thuộc tính.

Để làm phức tạp hơn nữa, các thuộc tính không chạy khi gọi hành động trực tiếp trong thử nghiệm, vì vậy tôi không thể gọi hành động và xem công việc đã hoàn thành chưa.

Tôi nên xác định/kiểm tra điều này trong MSpec như thế nào?

Trả lời

1

Bộ lọc là mối quan tâm cắt ngang và vì vậy bạn nên kiểm tra hành vi của bộ lọc độc lập với vị trí được áp dụng (nếu không bạn sẽ lặp lại nhiều lần kiểm tra).

Bạn vẫn có thể thể hiện hành vi mong muốn trong kiểm tra bộ điều khiển (trạng thái mô hình được lưu trữ trong dữ liệu tạm thời), nhưng thử nghiệm có thể khẳng định sự tồn tại của thuộc tính (có thể được đóng gói trong một hành vi có thể?).

Là một sang một bên: ASP.NET MVC được thiết kế với quy ước trả về chế độ xem nếu trạng thái mô hình có lỗi. Sử dụng PRG trong các trường hợp này có ý nghĩa như PRG được thiết kế để ngăn chặn việc gửi và xử lý biểu mẫu trùng lặp (nghĩa là yêu cầu hợp lệ). Khi người dùng đăng biểu mẫu không hợp lệ, bạn kiểm tra lỗi trước khi bắt đầu xử lý yêu cầu, do đó ngăn yêu cầu người dùng xử lý.

+0

OK. Vì vậy, về cơ bản những gì bạn đề nghị là tôi xác định một hành vi mà nói "stores_model_state_in_temp_data" nhưng thực sự chỉ kiểm tra rằng các thuộc tính được áp dụng, và sau đó xác định các xét nghiệm cho các thuộc tính trong một bối cảnh thử nghiệm hoàn toàn khác nhau? –

+0

Có. Bạn kiểm tra hành vi mong đợi (cái gì) nhiều lần và việc thực hiện behiour đó (cách) một lần. – Neal

+0

OK. Bây giờ, một vấn đề tiếp theo: Trong cách thử nghiệm cũ của tôi nếu một thuộc tính được áp dụng, tôi đã sử dụng sự phản chiếu và truyền một biểu thức và một kiểu cho phương thức thử nghiệm. Khi xác định một hành vi, tôi không thể tìm ra cách để vượt qua các đối số này. (Loại có thể được tìm ra bằng cách chỉ làm cho lớp hành vi chung chung hoặc một cái gì đó, nhưng tôi vẫn cần một lambda ...) Làm thế nào để làm điều đó? –

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