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

  • CareyHolzman

    CareyHolzman

    24 Ocak 2008
  • SDSARG3

    SDSARG3

    14 Mart 2009
  • sinumatic

    sinumatic

    19 Aralık 2006