我一直在尝试和寻找一段时间,但我找不到任何方式来体面地嘲笑这个。我找到了一种使用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行如何与你的例子一起工作?在控制器上下文中我把它放在哪里?
答案 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