如何获取,可模拟,当前登录asp .net会员的用户名?

时间:2013-10-20 03:19:33

标签: asp.net-mvc asp.net-mvc-3 unit-testing asp.net-membership

目前我正在使用Membership.GetUser()来获取当前登录的用户名。然而,这是一种静态方法,它不是Mockable。有没有其他方法可以获得模拟友好的当前登录用户名?

仅供参考:我正在使用Moq框架和NUnit。

3 个答案:

答案 0 :(得分:0)

通常,在这种情况下,您可以创建一个包装器接口,您可以使用它来存根GetUser()方法。

public interface IMembersipService {
    MembershipUser GetUser();
}

public class MembersipService : IMembersipService
{
    public MembershipUser GetUser() {
        return Membership.GetUser();
    }
}

IMembersipService.GetUser()可以根据您的需要进行存根/模拟。

附加说明:Membership类中还有其他例程,您可能需要访问这些例程。您可以使用相同的界面来访问这些方法。像静态成员这样的包装界面提供了可测试性。

答案 1 :(得分:0)

在ASP.NET MVC中,HttpContextBase被设计为可模拟的,因此您可以使用其User属性来获取当前登录的用户。

答案 2 :(得分:0)

这将为您登录用户名:

string userName = User.Identity.Name;