Имитация контекста контроллера Asp.net-mvc
Вот образец класса модульного asp.net-mvc теста с использованием MsTest mocks и Moq, который имитирует asp-mvc объекты HttpRequest и HttpResponse. (.NET asp.mvc 4.0, ASP.NET MVC 3.0)
Действие moq контроллера получает значение mvc.net из запроса и устанавливает unit-test заголовок http в объектах asp.net-mvc ответа. Аналогичным образом asp-net-mvc можно смоделировать другие asp.net-mvc объекты контекста http
[TestClass]
public class MyControllerTest
{
protected Mock HttpContextBaseMock;
protected Mock HttpRequestMock;
protected Mock HttpResponseMock;
[TestInitialize]
public void TestInitialize()
{
HttpContextBaseMock = new Mock();
HttpRequestMock = new Mock();
HttpResponseMock = new Mock();
HttpContextBaseMock.SetupGet(x => x.Request).Returns(HttpRequestMock.Object);
HttpContextBaseMock.SetupGet(x => x.Response).Returns(HttpResponseMock.Object);
}
protected MyController SetupController()
{
var routes = new RouteCollection();
var controller = new MyController();
controller.ControllerContext = new ControllerContext(HttpContextBaseMock.Object, new RouteData(), controller);
controller.Url = new UrlHelper(new RequestContext(HttpContextBaseMock.Object, new RouteData()), routes);
return controller;
}
[TestMethod]
public void IndexTest()
{
HttpRequestMock.Setup(x => x["x"]).Returns("1");
HttpResponseMock.Setup(x => x.AddHeader("name", "value"));
var controller = SetupController();
var result = controller.Index();
Assert.AreEqual("1", result.Content);
HttpRequestMock.VerifyAll();
HttpResponseMock.VerifyAll();
}
}
public class MyController : Controller
{
public ContentResult Index()
{
var x = Request["x"];
Response.AddHeader("name", "value");
return Content(x);
}
}
asp.net-mvc
unit-testing
mocking
moq
rhino-mocks
Имитация контекста контроллера Asp.net-mvc
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.