T4MVCを使用するAsp.Net MVCアプリケーション用にWatinを使用してspecflowテストを作成しています。非Webアプリケーション(テスト)からのAsp.Net MVCルートの使用
私は自分自身が "魔法の文字列"のURLをテストで使用していることを知っています。私はそれが好きではありません。
[Given(@"I am on the sign up page")]
public void GivenIAmOnTheSignUpPage()
{
string rootUrl = ConfigurationManager.AppSettings["RootUrl"];
string fullUrl = string.Format("{0}/Authentication/Signup",rootUrl);
WebBrowser.Current.GoTo(fullUrl);
}
私は、MVCアプリケーションでは、このような何かを行うように私はむしろ私のT4MVCアクション結果を使用することになり
...何である
[Given(@"I am on the sign up page")]
public void GivenIAmOnTheSignUpPage()
{
WebBrowser.Current.GoTo(MVC.Authentication.SignUp().ToAbsoluteUrl());
}
マイToAbsoluteUrl
拡張メソッド
public static class RouteHelper
{
private static UrlHelper _urlHelper;
private static string _rootUrl;
public static string ToAbsoluteUrl(this ActionResult result)
{
EnsureUrlHelperInitialized();
var relativeUrl = _urlHelper.Action(result);
return string.Format("{0}/{1}", _rootUrl, relativeUrl);
}
private static void EnsureUrlHelperInitialized()
{
if (_urlHelper==null)
{
_rootUrl = ConfigurationManager.AppSettings["RootUrl"];
var request = new HttpRequest("/", _rootUrl, "");
var response = new HttpResponse(new StringWriter());
var context = new HttpContext(request,response);
HttpContext.Current = context;
var httpContextBase = new HttpContextWrapper(context);
RouteTable.Routes.Clear();
MvcApplication.RegisterRoutes(RouteTable.Routes);
var requestContext = new RequestContext(httpContextBase, RouteTable.Routes.GetRouteData(httpContextBase));
_urlHelper = new UrlHelper(requestContext, RouteTable.Routes);
}
}
}
TestContextとRouteCollectionを初期化してテストURLを生成できる正しい方法?
現在、私はvar requestContext = new RequestContext(httpContextBase, RouteTable.Routes.GetRouteData(httpContextBase));
行にNullReferenceExceptionを受け取ります。それはrequestContextを新規作成する正しい方法ですか?
またはActionResult(T4MVCから)を取り出し、Webアプリケーションの外部にある絶対URLに解決するより良い方法があれば、それは本当に私が探しているものです。
SpecFlowでどのユニットテスト用libを使用していますか? MsTest、NUnitなど何か? – danludwig
xUnitを使用していますが、それは重要ですか? – Brook
いいえ、私は私の答えをカスタマイズすることができますかと思いました。私は[TestClass]と[AssemblyInitialize]のxunitに相当するものが何であるか分かりませんが、見つけ出すのは難しくないと思います。 – danludwig