Sim*_*mon 9 c# unit-testing asp.net-membership mocking asp.net-mvc-2
我目前正在开发一个asp.net mvc 2应用程序,它使用默认的SqlMembershipProvider进行身份验证.我已经实现了一个控制器方法,通过调用来读取当前用户的ProviderUserKey Membership.GetUser().ProviderUserKey.现在我正在尝试为这个控制器编写一些测试方法.
为了摆脱静态Membership类的依赖性,我创建了一个瘦包装器,并使我的控制器依赖于相应的接口:
public interface IStaticMembershipService {
MembershipUser GetUser();
void UpdateUser(MembershipUser user);
}
Run Code Online (Sandbox Code Playgroud)
到目前为止一切正常,但为了对控制器进行单元测试,我仍然需要模拟GetUser()此接口的方法并返回包含ProviderUserKey属性的MembershipUser对象.模拟这样一个对象最简单的方法是什么?
我正在使用moq作为模拟框架.
Str*_*ior 11
它看起来像这样:
var membershipMock = new Mock<IStaticMembershipService>();
var userMock = new Mock<MembershipUser>();
userMock.Setup(u => u.ProviderUserKey).Returns(guid);
membershipMock.Setup(s => s.GetUser()).Returns(userMock.Object);
Run Code Online (Sandbox Code Playgroud)
如果MembershipUser类不适合模拟(即,如果ProviderUserKey不是虚拟的),您将需要创建自己的对象来表示您将需要从MembershipUser对象获取的值,并让您的服务返回其中之一.
MembershipUser也是一个像poco一样的对象,你可以创建一个像这样的实例:
var userMock = new MembershipUser {ProviderUserKey = guid};
Run Code Online (Sandbox Code Playgroud)