2010-04-23 12 views
6

MVC birim testinde bir kontrolör yöntemini test etmek istiyorum. Denetleyici yöntemimin sınanması için, bir boy ile Request.Files [] koleksiyonuna ihtiyacım var. Denetleyici yöntemiyle oluşturulan görünümümde bir dosya yükleme denetimi kullandığım için Request.Files [] ile uğraşmak istiyorum. Herkes, lütfen benim testimde request.file koleksiyonunu nasıl taklit edebileceğimi önerebilir.MVC birim test sınıfında Request.Files [] ile nasıl alay edilir?

sayesinde Kullandığınız ama burada Rhino Mocks ile yapacağını nasıl ne alaycı çerçevesi söz etmedi

cevap

10

kapil:

Denetleyici:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(Request.Files.Count); 
    } 
} 

Birim testi:

[TestMethod] 
public void SomeTest() 
{ 
    // arrange 
    var controller = new HomeController(); 
    var context = MockRepository.GenerateStub<HttpContextBase>(); 
    var request = MockRepository.GenerateStub<HttpRequestBase>(); 
    var files = MockRepository.GenerateStub<HttpFileCollectionBase>(); 
    context.Stub(x => x.Request).Return(request); 
    files.Stub(x => x.Count).Return(5); 
    request.Stub(x => x.Files).Return(files); 
    controller.ControllerContext = new ControllerContext(context, new RouteData(), controller); 


    // act 
    var actual = controller.Index(); 

    // assert 
    Assert.IsInstanceOfType(actual, typeof(ViewResult)); 
    var viewResult = actual as ViewResult; 
    Assert.IsInstanceOfType(viewResult.ViewData.Model, typeof(int)); 
    Assert.AreEqual(5, viewResult.ViewData.Model); 
} 

Açıklama: MVCContrib.TestHelper bu test oldukça özellikle parçası alay bağlamı basitleştirilmiş ve de iddia edilebilir:

[TestMethod] 
public void SomeTest() 
{ 
    // arrange 
    var sut = new HomeController(); 
    InitializeController(sut); 
    Files["test.txt"] = MockRepository.GenerateStub<HttpPostedFileBase>(); 

    // act 
    var actual = sut.Index(); 

    // assert 
    actual 
     .AssertViewRendered() 
     .WithViewData<int>() 
     .ShouldBe(1); 
} 
+1

Teşekkürler Darin. Açık kaynak alay çerçevesi "Moq" kullanıyorum. –

İlgili konular