Я хочу протестировать метод контроллера в модульном тесте MVC. Чтобы мой метод контроллера протестировал, я требую Запроса. Файлы [] набор с длиной один. Я хочу дразнить Запрос. Файлы [], поскольку я использовал управление загрузкой файла на своем представлении, представленном методом контроллера. Кто-либо может предложить, как я могу дразнить request.file набор в своем модульном тесте.
спасибо, kapil
Вы не упомянули, какой фреймворк вы используете но вот как это сделать с помощью Rhino Mocks:
Контроллер:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(Request.Files.Count);
}
}
Модульный тест:
[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);
}
Примечание: с помощью MVCContrib.TestHelper этот тест можно было бы значительно упростить, особенно часть насмешек контекста и также утверждает:
[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);
}
Скотт Хансельман написал в блоге сообщение об этом с использованием Moq.