所以我試圖單元測試一個控制器方法。我在VS 2010中使用MSTest的,起訂量和3.1當測試Asp.net MVC應用程序時,Microsoft.Web.Mvc.LinkBuilder.BuildUrlFromExpression失敗
測試方法:
[TestMethod]
public void TestAccountSignup()
{
var request = new Mock<HttpRequestBase>();
var context = new Mock<HttpContextBase>();
AccountController controller = new AccountController();
controller.ControllerContext = new System.Web.Mvc.ControllerContext(context.Object, new RouteData(), controller);
request.Setup(x => x.Cookies).Returns(new HttpCookieCollection());
context.Setup(x => x.Request).Returns(request.Object);
string username = StringHelper.GenerateRandomAlpha(10);
var res = controller.Register(username, "foozbaaa+" + username + "@example.com", null, true, "Testing!", null);
}
我控制器的方法:
[CaptchaValidator]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(string userName, string email,string existingUsername, bool captchaValid, string heardAbout, string heardAboutOther)
{
//Loads of stuff here....
//cool - all registered
//This line gives the problem
return new RedirectResult(this.BuildUrlFromExpression<AccountController>(x => x.AccountCreated()));
}
控制器方法工作得很好,當沒有單元測試。
當嘲諷,並呼籲通過這種方式,我得到的是最後一行System.Security.VerificationException:
方法Microsoft.Web.Mvc.LinkBuilder.BuildUrlFromExpression:類型參數「TController」違反了類型的約束參數'TController'。
現在很明顯AccountController是TController類型,否則當不進行單元測試時它將不起作用。它從我的BaseController繼承,它從常規Controller繼承。
我覺得這個錯誤是一個紅鯡魚,由於嘲笑 - 任何想法爲什麼?
非常感謝。
它最終就是這樣 - 我在我的測試項目中引用了期貨v1 dll,但在實際應用中有v2。非常感謝。 – Nik 2010-10-09 16:23:39