Итак, я пытаюсь протестировать метод контроллера.Я использую MSTest в VS 2010 и Moq 3.1
Метод теста:
[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, который наследуется от обычного контроллера.
У меня такое чувство, что эта ошибка - красная сельдь, из-за насмешек - есть идеи, почему?
Большое спасибо.