我如何假装使用ASP.NET MVC 2中的伪造的用户登录以进行单元测试目的
-
30-09-2019 - |
题
我刚刚开始学习和使用ASP.NET MVC 2,并更多地参与了单元测试我的代码。我的问题广泛是如何通过在测试中传递凭据来模拟用户登录。
我正在使用MSPEC,并试图使我的头围绕FakeIteasy,以写下我的测试。到目前为止,我相信我已经正确编写了一个测试(通过测试条件),因为未经验证的用户试图访问页面。
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(); };
}
到现在为止还挺好。但是,我想测试身份验证的用户击中家庭控制器时的情况。我坚持如何模拟身份验证的用户,欢迎任何帮助或建议。
蒂亚,
大卫
解决方案
在与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 );
};
}
那就做到了!谢谢帕特里克!
其他提示
这是Tou可以伪造身份的方式:
Subject( typeof( HomeController ) )]
public class context_for_a_home_controller_for_a_logged_user
{
protected static HomeController HomeController;
Establish context = () =>
{
// Create controller
HomeController = new HomeController();
var fakeControllerContext = A.Fake<ControllerContext>();
var fakeHttpContext = A.Fake<HttpContextBase>();
var fakePrincipal = A.Fake<IPrincipal>();
var fakeIdentity = new GenericIdentity("someusername");
HomeController.ControllerContext = fakeControllerContext;
A.CallTo(() => fakeControllerContext.HttpContext).Returns(fakeHttpContext);
A.CallTo(() => fakeHttpContext.User).Returns(fakePrincipal);
A.CallTo(() => fakePrincipal.Identity).Returns(fakeIdentity);
};
}
现在您使用 HomeController.User
财产将指向所提供的假校长。
不隶属于 StackOverflow