2013-06-21 34 views
5

Tôi đang viết bộ lọc hành động OnActionExecuting và tôi muốn đơn vị kiểm tra chức năng.Mocking HttpActionContext.ActionArguments khi thử nghiệm Web.Api ActionFilter

Một trong những điều mà bộ lọc cần thực hiện là thực hiện một số xác thực trên các đối số hành động được chuyển vào bộ lọc.

Tôi nhận được các đối số từ từ điển actionContext.ActionArguments đang hoạt động tốt cho việc triển khai nhưng tôi gặp khó khăn trong việc quản lý đơn vị kiểm tra nó.

Trong bài kiểm tra của tôi, tôi không thể đặt actionContext.ActionArguments vì nó không có setter hoặc tôi có thể giả mạo nó vì nó không phải là ảo.

Điều này khiến tôi khó hiểu về việc liệu tôi có thể nhận được bất kỳ giá trị nào từ các thử nghiệm đơn vị trong trường hợp này không?

Trả lời

9

Theo mã nguồn AspNetWebStack, actionContext.ActionArguments chỉ là một từ điển đơn giản. Do đó khá tầm thường để chèn một cặp giá trị quan trọng vào nó. Tôi sẽ chỉ làm một cái gì đó như

actionContext.ActionArguments [key] = value;

trong phần sắp xếp của kiểm tra đơn vị.

Hy vọng rằng sẽ giúp

4

Xem blog của tôi cho điều này: https://dondeetan.com/2016/09/19/validating-and-unit-testing-web-api-2-route-attribute-parameters/

var mockactioncontext = new HttpActionContext 
      { 
       ControllerContext = new HttpControllerContext 
       { 
        Request = new HttpRequestMessage() 
       }, 
       ActionArguments = { { "employeeid", "null" } } 
      }; 

      mockactioncontext.ControllerContext.Configuration = new HttpConfiguration(); 
      mockactioncontext.ControllerContext.Configuration.Formatters.Add(new JsonMediaTypeFormatter()); 

      var filter = new <youractionattributefilterclass>(); 
      filter.OnActionExecuting(mockactioncontext); 
      Assert.IsTrue(mockactioncontext.Response.StatusCode == HttpStatusCode.BadRequest); 
+0

Bạn có biết tại sao không phải là một thể hiện của Dictionary thể được truyền cho ActionArguments? Nó không cho tôi và nói ActionArguments là chỉ đọc. – Gerrit

+0

Xin lỗi trả lời muộn. Không thử điều đó. –

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