SORU
23 Mart 2009, PAZARTESİ


ASP.NET MVC: Birim UrlHelper kullanan denetleyicileri test

Denetleyicileri hareketlerimden biri, bir Ajax isteği çağrılan bir yönlendirme yapabilirim yani istemci tarafı için bir URL veriyor. Url.RouteUrl(..) kullanıyorum ve ekibim sırasında Controller.Url parametre beri başarısız testleri önceden doldurulmuş değil.

Denedim bir çok şey, başkaları da çalışan saplama UrlHelper (başarısız olan), el ile oluşturma UrlHelper RequestContext olan bir saplama HttpContextBase (başarısız bir RouteCollection.GetUrlWithApplicationPath çağrı).

Google aradım ama bu konuda neredeyse hiçbir şey bulunamadı. Bir şey yapmak çok aptalca benim Denetleyicisi Url.RouteUrl kullanarak eylem mıyım? Daha kolay bir yolu var mı?

Yapmak için daha da kötüsü, istiyorum test edebilmek döndürülen URL benim birim test - aslında ben tek dertleri biliyor olmak, yönlendirme hakkını rota, ama beri ben dönen bir URL yerine bir güzergah etmek istiyorum kontrol URL çözümlenir (örn. bir kullanarak RouteCollection). - ama benim test geçirmeden başlamak için çok mutlu olacağım.

CEVAP
23 Mart 2009, PAZARTESİ


Burada benzer bir durum için benim testleri (xUnit Adedi) (Url kullanarak sadece bir tanesidir.Denetleyicisi RouteUrl)

Yardımcı olur: bu umut

var routes = new RouteCollection();
MvcApplication.RegisterRoutes(routes);

var request = new Mock<HttpRequestBase>(MockBehavior.Strict);
request.SetupGet(x => x.ApplicationPath).Returns("/");
request.SetupGet(x => x.Url).Returns(new Uri("http://localhost/a", UriKind.Absolute));
request.SetupGet(x => x.ServerVariables).Returns(new System.Collections.Specialized.NameValueCollection());

var response = new Mock<HttpResponseBase>(MockBehavior.Strict);
response.Setup(x => x.ApplyAppPathModifier("/post1")).Returns("http://localhost/post1");

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

var controller = new LinkbackController(dbF.Object);
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);
controller.Url = new UrlHelper(new RequestContext(context.Object, new RouteData()), routes);

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ColdfusTion

    ColdfusTion

    3 Aralık 2007
  • Eddie Bravo

    Eddie Bravo

    17 EKİM 2006
  • RawBrahs

    RawBrahs

    28 Aralık 2010