SORU
13 AĞUSTOS 2009, PERŞEMBE


Birim MVC doğrulama testleri

Nasıl benim denetleyicisi eylem MVC 2 DataAnnotation doğrulama Önizleme 1 kullanıyorum ne zaman bir varlık, doğrularken, ModelState doğru hataları koyarak test edebilirsiniz?

Bazı kod göstermek için. İlk eylem:

    [HttpPost]
    public ActionResult Index(BlogPost b)
    {
        if(ModelState.IsValid)
        {
            _blogService.Insert(b);
            return(View("Success", b));
        }
        return View(b);
    }

Ve burada geçiyor olmalı ama (MbUnit Ve Adedi kullanarak) değil bence bu başarısız bir birim test:

[Test]
public void When_processing_invalid_post_HomeControllerModelState_should_have_at_least_one_error()
{
    // arrange
    var mockRepository = new Mock<IBlogPostSVC>();
    var homeController = new HomeController(mockRepository.Object);

    // act
    var p = new BlogPost { Title = "test" };            // date and content should be required
    homeController.Index(p);

    // assert
    Assert.IsTrue(!homeController.ModelState.IsValid);
}

Bu soruya ek olarak, sanırımgerekirBen doğrulama Test, ve bu test etmeli miyim?

CEVAP
28 EYLÜL 2010, Salı


Eski bir yazı necro için nefret ediyorum, ama kendi düşüncelerim sadece bu sorunu vardı ve cevabı ararken bu yazıya rastladım beri) eklemek istedim.

  1. Denetleyicisi testleri doğrulama testi yok. Ya da MVC ... ... doğrulama güven veya kendi (yani diğer kod, kod test etme) yazma
  2. Eğer beklediğiniz ne yaptığını doğrulama test etmek istiyorsanız, model testleri (daha karmaşık düzenli ifade benim doğrulamalarını bir çift için yaptım) test edin.

Gerçekten burada test etmek istiyorum ne kontrolün doğrulama başarısız olduğunda ne yapmamı istediğini yapmasıdır. Bu kodunuzu ve beklentileri var. Test test etmek istediğiniz bu mu fark basittir:

[test]
public void TestInvalidPostBehavior()
{
    // arrange
    var mockRepository = new Mock<IBlogPostSVC>();
    var homeController = new HomeController(mockRepository.Object);
    var p = new BlogPost();

    homeController.ViewData.ModelState.AddModelError("Key", "ErrorMessage"); // Values of these two strings don't matter.  
    // What I'm doing is setting up the situation: my controller is receiving an invalid model.

    // act
    var result = (ViewResult) homeController.Index(p);

    // assert
    result.ForView("Index")
    Assert.That(result.ViewData.Model, Is.EqualTo(p));
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Alan Fullmer

    Alan Fullmer

    3 EYLÜL 2010
  • Edgar flores

    Edgar flores

    7 HAZİRAN 2006
  • nigahiga

    nigahiga

    21 Temmuz 2006