我有一个允许用户登录的 ASP.NET 应用程序。我的应用程序的另一部分使用 UserId(用户必须登录才能访问 Controller )。如何伪造登录以进行单元测试?
这是我获取 UserId 的方法
Private _UserId As Guid
Public ReadOnly Property UserId() As Guid
Get
_UserId = System.Web.Security.Membership.GetUser().ProviderUserKey
Return _UserId
End Get
End Property
谢谢
编辑
这是一个 MVC 3 项目。
最佳答案
您可以为您的成员资格编写一个包装类,以便您可以创建一个模拟以在单元测试中使用。代码是用 C# 编写的,我很抱歉,但你会明白我的意思的。
public interface IMyMemberShip
{
Guid GetUserId();
}
public class MyMemberShip : IMyMemberShip
{
public Guid GetUserId()
{
return (Guid)System.Web.Security.Membership.GetUser().ProviderUserKey;
}
}
public class MockMyMembership : IMyMemberShip
{
public Guid GetUserId()
{
return Guid.NewGuid();
}
}
public class AnotherPartOfYourApplication
{
IMyMemberShip _myMembership;
public AnotherPartOfYourApplication(IMyMemberShip myMemberShip)
{
_myMembership = myMemberShip;
}
public void GetUserIdAndDoSomething()
{
var userId = _myMembership.GetUserId();
}
}
如果你没有在模拟中做复杂的事情,我可能会使用 moq所以你在单元测试中根本不需要模拟类。
var mock = new Mock<IMyMemberShip>();
mock.Setup(m => m.GetUserId()).Returns(Guid.NewGuid());
关于asp.net - 需要用户登录的 UnitTest ASP.NET 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8234876/