2009-04-05 17 views
5

Şu Action Method ürünüm var deneme deneme çalışıyorum. AcceptVerbs'a dikkat edin? Bunu test ettiğimden emin olmalıyım.ASP.NET'te bir ASP ile HTTP-Post nasıl test edilir?

işte yöntem burada.

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

... İşte var moq kod

[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. 

ne ben bir post oldu isteği doğrulamak için ne gerekiyor?

cevap

9

Mvc "yığın" ın bir parçası olarak ControllerActionInvoker tarafından normal olarak çalıştırıldığı için, özniteliğiniz bir birim sınaması olarak çalıştırıldığında çağrılmaz. Bu gibi durumlarda yaptığım şey, doğru özniteliğin doğru parametrelerle eyleme uygulandığından emin olmak için bir test yazmaktır. Sonra çerçevenin işini doğru yapacağına inanıyorum. Bunu yapmak

yansıma gerektirir:

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

Yani sizin demek testleri aksine size .. .post fiil ile belirli denetleyici yöntemini dekore emin olmak için test etmekte olduğumuzu olduğunu Metot bir Http yayınlandı (Bu kapsamı dışında sıhhi tesisat yolu - bu çerçeve şeyler) çünkü yöntem ateş edildi ..? –

+0

Doğru. Filtreyi başlatan işlevsellik, yöntemin kapsamı dışındadır (yöntem çağrılmadan önce işlenir), böylece doğru öznitelik uygulandığında, yönteminizde hiçbir POST olmayanını görmezsiniz. – tvanfosson

İlgili konular