Đây là một lớp thử nghiệm đơn vị mẫu sử dụng MSTest và Moq mà chế giễu HttpRequest và HttpResponse đối tượng. (.NET 4.0, ASP.NET MVC 3.0)
Tác vụ điều khiển nhận giá trị từ yêu cầu và đặt tiêu đề http trong đối tượng phản hồi.Các đối tượng ngữ cảnh http khác có thể được mô phỏng theo cách tương tự
[TestClass]
public class MyControllerTest
{
protected Mock<HttpContextBase> HttpContextBaseMock;
protected Mock<HttpRequestBase> HttpRequestMock;
protected Mock<HttpResponseBase> HttpResponseMock;
[TestInitialize]
public void TestInitialize()
{
HttpContextBaseMock = new Mock<HttpContextBase>();
HttpRequestMock = new Mock<HttpRequestBase>();
HttpResponseMock = new Mock<HttpResponseBase>();
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);
}
}
Nguồn
2013-02-22 04:37:50
Tôi đang cân nhắc thực hiện việc này. Nhưng chỉ cần mô phỏng cho kết nối cơ sở dữ liệu. Thay vì kiểm tra ánh xạ cơ sở dữ liệu, tôi đã chuyển hàm này sang một lớp thông thường và chỉ kiểm tra hàm đó mà không có kết nối cơ sở dữ liệu. – MrFox