asp.net mvc: how to mock Url.Content(“~”)?

后端 未结 4 1279
傲寒
傲寒 2021-01-19 07:12

anybody knows how to mock Url.Content(\"~\") ?

(BTW: I\'m using Moq)

4条回答
  •  我在风中等你
    2021-01-19 07:46

    I know this content is old, but this is how I do it now:

    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();
                    var httpRequestBase = new Mock();
    
                    httpContextBase.Setup(@base => @base.Request).Returns(httpRequestBase.Object);
    
                    httpRequestBase.Setup(@base => @base.ApplicationPath).Returns("/Test");
    
    
                    var requestContext = new Mock();
                    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"));
                }
            } 
        }
    }
    

提交回复
热议问题