When you create the UrlHelper with the RouteContext the HttpContext is null in your unit test environment. Without it you'll hit a lot of NullReferenceExceptions when you try to call any methods that rely on it.
There are a number of threads out there on mocking the various web contexts. You can check out this one:
How do I mock the HttpContext in ASP.NET MVC using Moq?
or this one
Mock HttpContext.Current in Test Init Method
EDIT:
The following will work. Note you need to mock the HttpContext.Request.ApplicationPath and the HttpContext.Response.ApplyAppPathModifier().
[Test]
public void DummyTest() {
var context = new Mock<HttpContextBase>();
context.Setup( c => c.Request.ApplicationPath ).Returns( "/tmp/testpath" );
context.Setup( c => c.Response.ApplyAppPathModifier( It.IsAny<string>( ) ) ).Returns( "/mynewVirtualPath/" );
RequestContext requestContext = new RequestContext( context.Object, new RouteData() );
UrlHelper urlHelper = new UrlHelper( requestContext );
string path = urlHelper.Content( "~/test.png" );
Assert.IsNotNullOrEmpty( path );
}
I found the details for this in the following thread:
Where does ASP.NET virtual path resolve the tilde "~"?