如何moq Membership.GetUser()。ProviderUserKey.ToString()?

时间:2015-01-07 13:58:40

标签: asp.net-mvc unit-testing moq

我一直在尝试和寻找一段时间,但我找不到任何方式来体面地嘲笑这个。我找到了一种使用fakehttpcontext很容易地模拟日志记录的方法。但是这个方法:Membership.GetUser()。当你嘲笑它时,ProviderUserKey.ToString()仍然无效。我目前正在使用Moq作为我的模拟框架,但找不到任何文档。

这就是我的意思,正常的嘲笑你这样做:

var fakeHttpContext = new Mock<HttpContextBase>();
var fakeIdentity = new GenericIdentity("Richard");
var principal = new GenericPrincipal(fakeIdentity, null);

fakeHttpContext.Setup(t => t.User).Returns(principal);
var controllerContext = new Mock<ControllerContext>();
controllerContext.Setup(t => t.HttpContext).Returns(fakeHttpContext.Object);

var service = new PersonController(mockContext.Object);
service.ControllerContext = controllerContext.Object;

但最后2行如何与你的例子一起工作?在控制器上下文中我把它放在哪里?

1 个答案:

答案 0 :(得分:1)

模拟方法Membership.GetUser()是不可能的,因为这是一个不带参数的static方法。

考虑将Membership.GetUser()从课堂中取出,然后在课堂中注入MembershipUser user个实例。然后,从“真实”代码中,Membership.GetUser()使用user

从单元测试代码(使用Moq),您说:

var userMock = new Mock<MembershipUser>();
userMock.Setup(u => u.ProviderUserKey.ToString()).Returns("TheStringYouDesire");

// "inject"  userMock.Object  into what you want to test