यहाँ जो HttpRequest और HttpResponse वस्तुओं का मजाक उड़ाता है एक नमूना इकाई परीक्षण वर्ग MSTest और Moq उपयोग कर रहा है। (.NET 4.0, एएसपी.नेट एमवीसी 3.0)
नियंत्रक कार्रवाई अनुरोध से मूल्य प्राप्त करती है और प्रतिक्रिया ऑब्जेक्ट्स में http शीर्षलेख सेट करती है।अन्य http संदर्भ ऑब्जेक्ट्स को उसी तरह से मजाक किया जा सकता है
[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);
}
}
स्रोत
2013-02-22 04:37:50
मैं ऐसा करने पर विचार कर रहा था। लेकिन केवल डेटाबेस कनेक्शन के लिए नकली की जरूरत है। डेटाबेस मैपिंग का परीक्षण करने के बजाय मैंने फ़ंक्शन को नियमित कक्षा में स्थानांतरित कर दिया और डेटाबेस कनेक्शन के बिना उस फ़ंक्शन का परीक्षण किया। – MrFox