asp.net-mvc-2 – 如何在asp.net mvc 2中使用fakeiteasy假冒用户登录以进行单元测试

我刚开始学习和使用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!

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....