我刚开始学习和使用ASP.NET MVC 2,并且更多地参与单元测试我的代码.我的问题是如何通过在我的测试中传入凭据来模拟用户登录.
我正在使用MSpec,并试图让我的头脑周围的假冒为了写我的测试.到目前为止,我相信我已经正确地编写了一个测试(它通过了测试条件),以供未经身份验证的用户尝试访问页面时使用.
Subject( typeof( HomeController ) )] public class context_for_a_home_controller_for_not_logged_user { protected static HomeController HomeController; Establish context = () => { // Create controller HomeController = new HomeController(); HomeController.ControllerContext = A.Fake<ControllerContext>(); }; } [Subject(typeof(HomeController))] public class when_the_home_page_is_requested : context_for_a_home_controller_for_not_logged_user { static ActionResult result; Because of = () => result = HomeController.Index(); It should_return_the_log_in_page_if_user_not_logged_in = () => { result.ShouldBeAView().And().ShouldUsedefaultview(); }; }
到现在为止还挺好.但是,我想测试经过身份验证的用户何时命中主控制器的情况.我坚持如何模拟经过身份验证的用户,欢迎任何帮助或建议.
TIA,
大卫
解决方法
在与FakeItEasy的创建者Patrik Hagne取得联系后,他想出了以下内容:
[Subject( typeof( HomeController ) )] public class context_for_a_home_controller_for_logged_user { protected static HomeController HomeController; Establish context = () => { // Create controller HomeController = new HomeController(); HomeController.ControllerContext = A.Fake<ControllerContext>(); var fakePrincipal = A.Fake<IPrincipal>(); var fakeIdentity = new GenericIdentity( "username" ); A.CallTo( () => fakePrincipal.Identity ).Returns( fakeIdentity ); A.CallTo( () => HomeController.ControllerContext.HttpContext.User ).Returns( fakePrincipal ); }; }
这就是诀窍!谢谢Patrik!