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
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);
Nasıl birim FormsAuthentication kullan...
Birim bir Java Sunucu uygulaması test...
TransactionManagementError "'...
Birim C özel yöntemler test#...
'un hangi birim-test için en iyi ...