2010-04-23 31 views
6

Tôi muốn thử nghiệm một phương pháp điều khiển trong thử nghiệm đơn vị MVC. Đối với phương pháp điều khiển của tôi để kiểm tra, tôi yêu cầu một bộ sưu tập Request.Files [] với chiều dài một. Tôi muốn thử Request.Files [] vì tôi đã sử dụng điều khiển tải lên tệp trên chế độ xem của tôi được hiển thị bằng phương pháp bộ điều khiển. Bất cứ ai có thể vui lòng đề nghị làm thế nào tôi có thể thử bộ sưu tập request.file trong bài kiểm tra đơn vị của tôi.Làm thế nào để mô phỏng Request.Files [] trong lớp thử nghiệm đơn vị MVC?

cảm ơn, Kapil

Trả lời

10

Bạn đã không đề cập đến những gì khuôn khổ mocking bạn đang sử dụng nhưng đây là cách bạn sẽ làm điều đó với Rhino Mocks:

Bộ điều khiển:

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

Đơn vị kiểm tra:

[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); 
} 

Lưu ý: Sử dụng MVCContrib.TestHelper thử nghiệm này có thể được đơn giản hóa rất nhiều đặc biệt là bối cảnh chế giễu phần và khẳng định cũng như:

[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

Cảm ơn Darin. Tôi đang sử dụng khung mocking nguồn mở "Moq". –

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