私はAsp.net mvc Webアプリケーションを開発しています。私は私のアプリケーションにユニットテストをしています。私はオブジェクトを模擬するためにMoqを使用しています。私はUrlヘルパークラスを模擬しようとしています。私はこのリンクを見つけました - asp.net mvc: how to mock Url.Content("~")?。そのクラスを使って、ユニットテストでUrlHelper
クラスを模擬することができます。Asp.net mvcでUrlHelperクラスがnull例外をスローする
私はここBaseController
public class BaseController : Controller
{
private IUrlHelper _urlHelper;
public new IUrlHelper Url
{
get { return _urlHelper; }
set { _urlHelper = value; }
}
}
を作成IUrlHelper
インタフェース/抽象化は、私はこの
Mock<IUrlHelper> urlHelperMock = new Mock<IUrlHelper>();
urlHelperMock
.Setup(x => x.Content(It.IsAny<string>()))
.Returns<string>(x => "~/" + x);// Mock Content method of Url Helper
テストランのようなユニットテストでUrl.Content()
をモック
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);
}
あります正常に動作し、正常に動作します。問題は、リアルタイムアプリケーションでは使用できないということです。私は私のアプリケーションを実行し、Url.Content( "パス")を呼び出すとき、それはヌル例外をスローすることを意味します。このコードで
例えばpublic class ExampleController : BaseController
{
public string GetPath()
{
return Url.Content("~/Path/To/File");
}
}
Url.Content
ヌル例外をスローします。ユニットテストでうまくいきます。コードを修正するにはどうしたらいいですか?
この例では、テストのためにインターフェイスを模倣する方法を示していますが、実動コードの実装方法は示していません。実際の実装は行われていないため、ライブ実行ではnullになる可能性はありません。 – Nkosi