回答
你是指在控制器Url
財產,我想,這是UrlHelper
類型。我們能夠嘲笑這個的唯一方法是提取一個IUrlHelper
接口,並創建一個UrlHelperWrapper
類,它們都實現它幷包裝本地UrlHelper
類型。然後,我們對我們的BaseController
定義一個新的屬性,像這樣:
public new IUrlHelper Url
{
get { return _urlHelper; }
set { _urlHelper = value; }
}
這使我們能夠創造IUrlHelper
嘲笑並注入他們,但在默認情況下使用我們的UrlHelperWrapper
類的一個實例。對不起,它囉嗦很長,但正如你發現的那樣,這是一個問題,否則。但是,它不需要更改您的控制器中的任何Url.Action
和類似的呼叫。
這裏的接口:
public interface IUrlHelper
{
string Action(string actionName);
string Action(string actionName, object routeValues);
string Action(string actionName, string controllerName);
string Action(string actionName, RouteValueDictionary routeValues);
string Action(string actionName, string controllerName, object routeValues);
string Action(string actionName, string controllerName, RouteValueDictionary routeValues);
string Action(string actionName, string controllerName, object routeValues, string protocol);
string Action(string actionName, string controllerName, RouteValueDictionary routeValues, string protocol, string hostName);
string Content(string contentPath);
string Encode(string url);
string RouteUrl(object routeValues);
string RouteUrl(string routeName);
string RouteUrl(RouteValueDictionary routeValues);
string RouteUrl(string routeName, object routeValues);
string RouteUrl(string routeName, RouteValueDictionary routeValues);
string RouteUrl(string routeName, object routeValues, string protocol);
string RouteUrl(string routeName, RouteValueDictionary routeValues, string protocol, string hostName);
}
我不會打擾給你的UrlHelperWrapper
的定義 - 它真的只是實現這個啞巴包裝,並通過對UrlHelper
所有呼叫。
其實我已經做了它沒有所有這些東西,我會發布我自己的答案 – Omu 2010-01-19 09:35:13
任何人都有一個如何從David的答案設置'UrlHelperWrapper'和'BaseController'的例子嗎?我試圖實現這一點,但無法弄清楚如何將標準UrlHelper傳遞給BaseController的Url屬性。 'UrlHelper'類型不能轉換爲'IUrlHelper'。 – 2013-02-11 01:35:25
這是我的一個方法嘲笑url.content(並且還設置了IsAjaxRequest()爲true)
public static void SetContextWithAjaxRequestAndUrlContent(this BaseController controller)
{
var routes = new RouteCollection();
RouteConfigurator.RegisterRoutesTo(routes);
var httpContextBase = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
var respone = new Mock<HttpResponseBase>();
httpContextBase.Setup(x => x.Request).Returns(request.Object);
httpContextBase.Setup(x => x.Response).Returns(respone.Object);
request.Setup(x => x.Form).Returns(new NameValueCollection());
request.SetupGet(x => x.Headers).Returns(new System.Net.WebHeaderCollection {{"X-Requested-With", "XMLHttpRequest"}});
request.Setup(o => o.ApplicationPath).Returns("/Account");
request.Setup(o => o["X-Requested-With"]).Returns("XMLHttpRequest");
respone.Setup(o => o.ApplyAppPathModifier("/Account")).Returns("/Account");
controller.ControllerContext = new ControllerContext(httpContextBase.Object, new RouteData(), controller);
controller.Url = new UrlHelper(new RequestContext(controller.HttpContext, new RouteData()), routes);
}
這並不嚴格地嘲笑UrlHelper,所以你不能設置對Url.Content調用的期望... – 2010-01-19 09:48:43
明白了,我只是不在乎期望 – Omu 2010-01-19 11:40:26
我知道這個內容的時候,但是這是我現在該怎麼做:
IContentResolver.cs
using System.Web;
namespace Web.Controllers
{
public interface IContentResolver
{
string Resolve(string imageLocation, HttpRequestBase httpRequestBase);
}
}
ContentResolver.cs
using System.Web;
using System.Web.Mvc;
namespace Web.Controllers
{
public class ContentResolver : IContentResolver
{
public string Resolve(string imageLocation, HttpRequestBase httpRequestBase)
{
return new UrlHelper(httpRequestBase.RequestContext).Content(imageLocation);
}
}
}
個
ContentResolverTests.cs
using System.Web;
using System.Web.Routing;
using Web.Controllers;
using Moq;
using NUnit.Framework;
namespace Web.Tests.Controllers
{
public class ContentResolverTests
{
[TestFixture]
public class when_resolving_the_content_images
{
[Test]
public void then_should_resolve_to_proper_location()
{
// Arrange
var resolver = new ContentResolver();
// Act
var httpContextBase = new Mock<HttpContextBase>();
var httpRequestBase = new Mock<HttpRequestBase>();
httpContextBase.Setup(@base => @base.Request).Returns(httpRequestBase.Object);
httpRequestBase.Setup(@base => @base.ApplicationPath).Returns("/Test");
var requestContext = new Mock<RequestContext>();
requestContext.SetupGet(context => context.HttpContext).Returns(httpContextBase.Object);
httpRequestBase.SetupGet(@base => @base.RequestContext).Returns(requestContext.Object);
var url = resolver.Resolve("~/Content/loading.gif", httpRequestBase.Object);
// Assert
Assert.That(url, Is.EqualTo("/Test/Content/loading.gif"));
}
}
}
}
controller.Url = Substitute.ForPartsOf<UrlHelper>();
controller.Url.Content("~").Returns("path");
下跌免費與ForPartsOf (Partial subs and test spies)在NUnit的
- 1. ASP.NET MVC - Url.Content
- 2. 在ASP.net MVC使用Url.Content 2.0
- 3. ASP.NET MVC 3定位 - Url.Content
- 4. asp.net MVC Url.Content()CDN重定向
- 5. ASP.NET MVC RC返回Url.Content
- 6. ASP.NET MVC中Url.Content的問題
- 7. 如何在ASP.NET MVC中模擬模型?
- 8. 如何在asp.net mvc中模擬AuthorizeAttribute?
- 9. 如何在asp.net上模擬asp:imagebuttom mvc 2
- 10. ASP.NET MVC - 什麼是Url.Content()的用例?
- 11. 在ASP.net MVC控制器中使用Url.Content
- 12. ASP.NET Mvc 4使用包的好處Url.Content
- 13. MVC @ Url.Content vs @ Url.Action
- 14. Django在ASP.NET MVC中形成模擬MVC
- 15. 如何覆蓋MVC中的@ url.content?
- 16. 如何在使用ASP.NET MVC時模擬ASP.NET Ajax UpdatePanel?
- 17. 在asp.net中的url.content
- 18. MVC 5剃刀Url.Content(空)
- 19. 模擬一個請求(Asp.net MVC)
- 20. 模擬在ASP.NET MVC中工作
- 21. ASP.NET MVC創建一個模擬用戶
- 22. 想要在ASP.Net中模擬回傳MVC
- 23. 如何在ASP.NET MVC單元測試中模擬AutoMapper
- 24. 如何在ASP.NET MVC中模擬Membership類以啓用測試
- 25. 我如何在ASP.NET MVC身份加入模擬2.0
- 26. 你如何模擬asp.net mvc中的緩存對象?
- 27. 如何在asp.net mvc中模擬基礎控制器?
- 28. 如何使用Moq模擬ASP.NET MVC中的HttpContext?
- 29. 如何在ASP.Net MVC中模擬控制器上的請求?
- 30. 如何在ASP.NET MVC項目中模擬ScriptManager.RegisterStartupScript()
什麼是'Url'?這是一種類型嗎?物業? – 2010-01-19 08:29:24
它是UrlHelper類型的屬性(獲得) – Omu 2010-01-19 08:33:18