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?
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? –
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
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 đó? –