T4MVC kullanan bir Asp.Net MVC uygulaması için Watin kullanarak specflow testleri yazıyorum.Web dışı bir uygulamadan Asp.Net MVC Yollarını Kullanma (testler)
Kendimi beğenmediğim testlerde "magic string" URL'leri kullanarak buluyorum.
[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);
}
Ben MVC Uygulaması'nda böyle bir şey yapmak gibi ben daha ziyade benim T4MVC Eylem Sonuçları kullanırsınız
... nedir
[Given(@"I am on the sign up page")]
public void GivenIAmOnTheSignUpPage()
{
WebBrowser.Current.GoTo(MVC.Authentication.SignUp().ToAbsoluteUrl());
}
Benim ToAbsoluteUrl
Uzatma Yöntemi
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);
}
}
}
Test URL'lerimi oluşturabilmem için RequestContext ve RouteCollection'ı başlatmanın doğru yolu?
Şu anda var requestContext = new RequestContext(httpContextBase, RouteTable.Routes.GetRouteData(httpContextBase));
numaralı hatta bir NullReferenceException alıyorum. RequestContext'i güncellemenin doğru yolu bu mu? Veya bir ActionResult (T4MVC'den) almak ve onu bir web uygulamasının dışında mutlak bir URL'ye çözmek için daha iyi bir yol varsa, gerçekten aradığım şey budur.
SpecFlow ile hangi birim test lib'yi kullanıyorsunuz? MsTest, NUnit, ya da başka bir şey? – danludwig
xUnit kullanıyorum, fark eder mi? – Brook
Hayır, merak ettim ki cevabımı özelleştirebildim. Xunit eşdeğerlerinin [TestClass] ve [AssemblyInitialize] için ne olduğundan emin değilim, ancak bunun zor olmadığını hayal edin. – danludwig