2013-10-14 1 views
0

Я создал ViewEngine (для рабочего стола, таблетки, IPhone):Дать модульный тест для пользовательского ViewEngine в MVC

public ViewEngine() 
{ 
    Set 3 Locations 
}; 

public override ViewEngineResult FindView(ControllerContext controllerContext, 
              string viewName, string masterName, bool useCache) 
{ 
    Assign view locations... 
} 

Затем я создал класс Unit Test:

[Test] 
public void Test_IPad_UserAgent() 
{ 
    var controllerContext = new Mock<ControllerContext>(); 
    var controller = new PaymentController(); 

    controllerContext.SetupGet(p => p.HttpContext.Request.UserAgent).Returns("Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10"); 

    controller.ControllerContext = controllerContext.Object; 
    var result = controller.Index() as ViewResult; 
    var viewData = result.ViewData; 

} 

Мой вопрос: как написать утверждение, чтобы проверить, возвращает ли мой механизм представления правильный вид для разных строк UserAgent?

Я с удовольствием предоставил полный код для ViewEngine. Если кто-то рад помочь мне.

ответ

0

Вы можете проверить свойство ViewEngineCollection для подходящего ViewEngine, который вы ищете. Попробуйте что-то вроде:

Assert.IsInstanceOf<MyCustomViewEngine>(result.ViewEngineCollection.First()); 

Если вам нужно проверить что-либо за пределами типа ViewEngine, как фактическое View, который был возвращен, я хотел бы предложить вам предоставить такую ​​информацию через вашу таможню ViewEngine, в методе FindView , Например, вы можете предоставить некоторую информацию в ViewData и проверить эту информацию в своих тестах. Например:

view.ViewData.Add("path", "MyCustomPath/" + partialViewName; 

Обратитесь к этому вопросу для получения более подробной информации, почему это необходимо: Get View Name where ViewResult.ViewName is empty string for Unit Testing

Смежные вопросы