2009-04-05 30 views
5

Tôi đã nhận được Action Method sau đây Tôi đang cố gắng để moq kiểm tra. Hãy chú ý đến số AcceptVerbs? Tôi cần đảm bảo rằng tôi đang thử nghiệm điều đó.Làm cách nào để kiểm tra HTTP-Post bằng Moq trong ASP.NET?

đây là phương pháp.

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create([Bind(Include = "Subject, Content")]Post post, 
    HttpPostedFileBase imageFileName) 
{ 
    ... 
} 

đây là các mã moq tôi có ...

[TestMethod] 
public void Create_Action_snip_sniop_When_Http_Post_Is_Succesful() 
{ 
    // Arrange. 
    var mock = new Mock<ControllerContext>(); 
    mock.SetupGet(m => m.HttpContext.Request.HttpMethod).Returns("POST"); 

    // Snip some other arrangements. 

    var controller = PostController; 
    controller.ControllerContext = mock.Object; 

    // Act. 
    var viewResult = controller.Create(post, image.Object) as ViewResult; 

    // Assert. 
    Assert.IsNotNull(viewResult); 

    // TODO: Test that the request was an Http-Post. 

những gì tôi cần phải làm gì để xác minh theo yêu cầu là một bài?

Trả lời

9

Thuộc tính của bạn sẽ không được gọi khi chạy dưới dạng kiểm tra đơn vị vì nó thường được gọi bởi ControllerActionInvoker như một phần của "ngăn xếp" Mvc. Những gì tôi đã làm trong các trường hợp như thế này là viết một bài kiểm tra để đảm bảo rằng thuộc tính đúng được áp dụng cho hành động với các tham số chính xác. Sau đó, tôi tin tưởng rằng khuôn khổ sẽ thực hiện công việc của mình một cách chính xác.

Việc làm này đòi hỏi phải phản ánh:

public void Only_posts_are_allowed_to_my_action() 
{ 
     var method = typeof(MyController).GetMethod("MyAction"); 
     var attribute = method.GetCustomAttributes(typeof(AcceptVerbsAttribute),false) 
          .Cast<AcceptVerbsAttribute>() 
          .SingleOrDefault(); 

     Assert.IsNotNull(attribute); 
     Assert.AreEqual(1, attributes.Count()); 
     Assert.IsTrue(attributes.Contains(HttpVerbs.Post)); 
} 
+0

Vì vậy, những gì bạn đang nói là bạn đang thử nghiệm để đảm bảo rằng bạn đã trang trí các phương pháp điều khiển cụ thể với động từ .post .. như trái ngược với thử nghiệm mà phương pháp đã được kích hoạt trên một Request là Http-posted (bởi vì đó là đường ống dẫn nước bên ngoài phạm vi này -> nó là công cụ khung) ..? –

+0

Chính xác. Chức năng gọi bộ lọc nằm ngoài phạm vi của phương thức (được kích hoạt trước khi phương thức được gọi), do đó bạn sẽ không bao giờ thấy một POST không trong phương thức của bạn nếu thuộc tính đúng được áp dụng. – tvanfosson

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