Tôi đang viết kiểm tra luồng thông tin bằng cách sử dụng Watin, cho ứng dụng Asp.Net MVC sử dụng T4MVC.Sử dụng các tuyến Asp.Net MVC từ một ứng dụng không phải trên web (các bài kiểm tra)
Tôi thấy mình đang sử dụng url "chuỗi ma thuật" trong các bài kiểm tra mà tôi không thích.
[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);
}
tôi nhiều thà sử dụng kết quả T4MVC hành động của tôi như tôi làm trong App MVC, một cái gì đó như thế này ...
[Given(@"I am on the sign up page")]
public void GivenIAmOnTheSignUpPage()
{
WebBrowser.Current.GoTo(MVC.Authentication.SignUp().ToAbsoluteUrl());
}
My Extension Method 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);
}
}
}
là gì cách chính xác để khởi tạo RequestContext và RouteCollection để tôi có thể tạo URL thử nghiệm của mình?
Hiện tại tôi nhận được NullReferenceException trên dòng var requestContext = new RequestContext(httpContextBase, RouteTable.Routes.GetRouteData(httpContextBase));
. Đó có phải là cách đúng để tạo mới một requestContext không?
Hoặc nếu có cách nào tốt hơn để thực hiện ActionResult (từ T4MVC) và giải quyết nó thành url tuyệt đối, bên ngoài ứng dụng web, đó thực sự là những gì tôi đang tìm kiếm.
Bạn đang sử dụng lib thử nghiệm đơn vị nào với SpecFlow? MsTest, NUnit, hay cái gì khác? – danludwig
Tôi đang sử dụng xUnit, điều đó có quan trọng không? – Brook
Không, tôi đã tự hỏi nên tôi có thể tùy chỉnh câu trả lời của mình. Tôi không chắc chắn những gì tương đương xunit cho [TestClass] và [AssemblyInitialize], nhưng hãy tưởng tượng nó không khó để tìm ra. – danludwig