2012-06-11 1 views
1

Я пытаюсь проверить ActionResult, который возвращает частичный вид. Это действие проверяет, использует ли пользователь IE7 или IE8, и возвратит другое частичное, если пользователь использует IE7 или 8. Это связано с тем, что используемый java-скрипт не работает с 7 или 8, поэтому мы будем относиться к нему по-разному.Mocking Request.Browser.Type in Unit Tests

Я отказался от создания модели, потому что хочу просто сфокусироваться на Request.Browser.Type.

public ActionResult ActionName(string listing) 
{ 
    if (model.Count > 1 && Request.Browser.Type != "IE8" && Request.Browser.Type != "IE7") 
    { 
     return PartialView("~/Areas/Features/Views/Video/MultiVideo.cshtml", model); 
    } 
    return PartialView("~/Areas/Features/Views/Video/SingleVideo.cshtml", model.FirstOrDefault()); 
} 

В конце концов, я хочу знать две вещи

  1. Как вы можете дразнят Request.Browser.Type, если вообще?
  2. Является ли это хорошей практикой в ​​вашем контроллере? Если бы не какие решения были бы лучше?

То, что я пробовал:

var browser = new Mock<HttpContext>(MockBehavior.Strict); browser.Setup(x => x.Request.Browser).Returns("IE9");

ответ

4

Я ответил на свой вопрос при написании вопрос (который я нахожу это часто бывает для меня). Тем не менее, я не смог найти многого в этом другом месте, поэтому решил, что поделюсь своим решением.

С помощью this SO вопрос, который я придумал это, чтобы иметь возможность Mock типов браузеров

 var request = new Mock<HttpRequestBase>(MockBehavior.Strict); 

     // This line would do the job 
     request.Setup(b => b.Browser.Type).Returns("IE9"); 

     var context = new Mock<HttpContextBase>(); 
     context.SetupGet(c => c.Request).Returns(request.Object); 

     controller.ControllerContext = new ControllerContext(
              context.Object, 
              new RouteData(), 
              controller); 

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