Как дразнить Запрос. ServerVariables с помощью MOQ для ASP.NET MVC?

я просто учусь вставлять поблочное тестирование на свой asp.net mvc, когда я приехал для приобретения знаний о насмешке и различных платформах, там там теперь.

после проверки Так, я нашел, что MOQ, кажется, является самым легким взять. на данный момент я застреваю, пытаясь дразнить Запрос. ServerVariables, как после того, чтобы читать это сообщение, я узнал, что лучше абстрагировать их в свойство.

как таковой:

/// 
        /// Return the server port
        /// 
        protected string ServerPort
        {
            get
            {
                return Request.ServerVariables.Get("SERVER_PORT");
            }
        }

Но мне нелегко изучать, как правильно дразнить это. У меня есть домашний контроллер функция ActionResult, которая захватывает пользовательскую информацию о сервере, и продолжите создавать форму для захвата информации пользователя.

я пытался использовать mvcmockhelpers класс hanselman, но я не уверен, как использовать его.

это - то, что я имею до сих пор...

[Test]
        public void Create_Redirects_To_ProductAdded_On_Success() 
        {

            FakeViewEngine engine = new FakeViewEngine();

            HomeController controller = new HomeController();
            controller.ViewEngine = engine;

            MvcMockHelpers.SetFakeControllerContext(controller);

            controller.Create();

            var results = controller.Create();

            var typedResults = results as RedirectToRouteResult;

            Assert.AreEqual("", typedResults.RouteValues["action"], "Wrong action");
            Assert.AreEqual("", typedResults.RouteValues["controller"], "Wrong controller");
        }

Вопросы:

  1. На данный момент я все еще получаю ошибку пустой исключительной ситуации, когда я запускаю тест. Таким образом, что я пропускаю здесь?
  2. И если я использую mvcmockhelpers класс, как я могу все еще вызвать request.verifyall функцию, чтобы гарантировать, что вся насмешка является правильно установкой?

10
задан Community 23 May 2017 в 12:25
поделиться

1 ответ

так что в основном я вставил все ссылки и с помощью этой функции смог заставить ее работать. Я еще не использовал класс mvcmockhelpers, так как все еще пытаюсь изучить все это.

и для всех, кому интересно узнать, как я решил эту проблему, это код, который я использовал.

[Test]
public void Create_Returns_ViewResult_On_Success() 
{
  var server = new Mock<HttpServerUtilityBase>(MockBehavior.Loose);
  var response = new Mock<HttpResponseBase>(MockBehavior.Strict);

  var request = new Mock<HttpRequestBase>(MockBehavior.Strict);
  request.Setup(x => x.ApplicationPath).Returns("/");
  request.Setup(x => x.Url).Returns(new Uri("http://localhost"));
  request.Setup(x => x.ServerVariables).Returns(new System.Collections.Specialized.NameValueCollection{
    { "SERVER_NAME", "localhost" },
    { "SCRIPT_NAME", "localhost" },
    { "SERVER_PORT", "80" },
    { "HTTPS", "www.melaos.com" },
    { "REMOTE_ADDR", "127.0.0.1" },
    { "REMOTE_HOST", "127.0.0.1" }
  });

  var context = new Mock<HttpContextBase>();
  context.SetupGet(x => x.Request).Returns(request.Object);
  context.SetupGet(x => x.Response).Returns(response.Object);
  context.SetupGet(x => x.Server).Returns(server.Object);

  var controller = new HomeController();
  //MvcMockHelpers.SetFakeControllerContext(controller);
  controller.ControllerContext = new ControllerContext(context. Object, new RouteData(), controller);

  var results = controller.Create();
  Assert.IsNotNull(results);
  Assert.IsInstanceOf(typeof(ViewResult), results);
}
16
ответ дан 3 December 2019 в 21:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: