Существует простой контроллер, который в конструкторе его читает строка запроса.
public class ProductController : Controller
{
parivate string productName;
public ProductController()
{
productName = Request.QueryString["productname"];
}
public ActionResult Index()
{
ViewData["Message"] = productName;
return View();
}
}
Также у меня есть функция в модульном тесте, которая создает экземпляр этого контроллера, и я заполняю строку запроса объектом Mock, как показано ниже.
[TestClass]
public class ProductControllerTest
{
[TestMethod]
public void test()
{
// Arrange
var querystring = new System.Collections.Specialized.NameValueCollection { { "productname", "sampleproduct"} };
var mock = new Mock<ControllerContext>();
mock.SetupGet(p => p.HttpContext.Request.QueryString).Returns(querystring);
var controller = new ProductController();
controller.ControllerContext = mock.Object;
// Act
var result = controller.Index() as ViewResult;
// Assert
Assert.AreEqual("Index", result.ViewName);
}
}
К сожалению, Request.QueryString ["productname"] является нулем в конструкторе ProductController, когда я запускаю тестовый модуль.
Есть ли способ заполнить строку запроса с помощью насмешки и получить ее в конструкторе элемента управления?