有没有人为 UserManager
和 RoleManager
想出一个成功的模拟解决方案?我整天都在用头撞墙。我想要做的就是模拟对象以使用内存集合而不是访问 Entity Framework 数据存储。我搜索了互联网并尝试了几种不同的使用最小起订量的方法。
我的印象是新东西更容易测试。我错过了什么吗?
最佳答案
或者,您可以模拟 IUserStore<TUser>
UserManager
的界面接受作为参数。
var userStore = new Mock<IUserStore<ApplicationUser>>();
var userManager = new UserManager(userStore.Object);
正如@Joe Brunscheon 在下面的评论中指出的那样,UserManager 检测到对其他接口(interface)(如 IUserPasswordStore 等)的支持。您还可以最小化这些接口(interface):
var passwordManager = userStore.As<IUserPasswordStore<ApplicationUser>>()
.Setup(...).Returns(...);
您不必一次对所有这些进行最小起订,您可以根据被测代码的需要对它们进行最小起订。实际上,EF 用于实现 IUserStore 的 UserStore 实现了其他接口(interface),而 UserManager 将进行内部检测以查看是否实现了这些接口(interface),从而支持其他功能。幸运的是,最小起订量允许您使用 .As<T>()
模拟一个可以实现许多接口(interface)的代理。 .
简而言之,Microsoft.AspNet.Identity 确实为您提供了在代码中使用它所需的一切,无需包装。只要您使用依赖注入(inject)来实例化您的 UserManager,您就可以通过模拟它使用的接口(interface)并通过某种 IUserStore<T>
传递它们来在单元测试中安全地对其进行 moq。 moq 被扩充以支持 UserManager 内部检测到的其他接口(interface)上的方法。
关于c# - 模拟新的 Microsoft Entity Framework Identity UserManager 和 RoleManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21194324/