【发布时间】:2011-11-29 04:48:26
【问题描述】:
我想为以下控制器创建单元测试,但在 Membership 类中失败:
公共类 AccountController:BaseController { 公共 IFormsAuthenticationService FormsService { 获取;放; } 公共 IMembershipService MembershipService { get;放; } 受保护的覆盖无效初始化(RequestContext requestContext) { if(FormsService == null) { FormsService = new FormsAuthenticationService(); } if(MembershipService == null) { MembershipService = new AccountMembershipService(); } base.Initialize(requestContext); } 公共 ActionResult LogOn() { 返回视图(“登录”); } [HttpPost] public ActionResult LogOnFromUser(LappLogonModel 模型,字符串 returnUrl) { 如果(模型状态。IsValid) { 字符串用户名 = Membership.GetUserNameByEmail(model.Email); if(MembershipService.ValidateUser(model.Email, model.Password)) { FormsService.SignIn(用户名,真); var service = new AuthenticateServicePack(); service.Authenticate(model.Email, model.Password); return RedirectToAction("Home"); } } ModelState.AddModelError("", "提供的用户名或密码不正确。"); 返回视图(“登录”,模型); } }单元测试代码:
[测试类] 公共类 AccountControllerTest { [测试方法] 公共无效LogOnPostTest() { var mockRequest = MockRepository.GenerateMock(); var target = new AccountController_Accessor(); 目标。初始化(模拟请求); var model = new LogonModel() { UserName = "test", Password = "1234" }; 字符串 returnUrl = string.Empty; ActionResult 预期 = null; ActionResult 实际 = target.LogOn(model, returnUrl); 如果(实际 == 空) Assert.Fail("应该已经重定向"); } }当我用谷歌搜索时,我得到了以下代码,但我不知道如何将成员资格传递给 accountcontroller
var httpContext = MockRepository.GenerateMock(); var httpRequest = MockRepository.GenerateMock(); httpContext.Stub(x => x.Request).Return(httpRequest); httpRequest.Stub(x => x.HttpMethod).Return("POST"); //创建一个模拟 MembershipProvider 并设置期望 var membersProvider = MockRepository.GenerateMock(); membersProvider.Expect(x => x.ValidateUser(username, password)).Return(false); //创建一个存根 IFormsAuthentication var formsAuth = MockRepository.GenerateStub(); /*但是在这里做什么???{...... ………………………………………………………………………………………………………………………………………… ................................................}*/ controller.LogOnFromUser(model, returnUrl);请帮助我让这段代码正常工作。
【问题讨论】:
标签: asp.net asp.net-mvc unit-testing