gpt4 book ai didi

c# - 模拟新的 Microsoft Entity Framework Identity UserManager 和 RoleManager

转载 作者:IT王子 更新时间:2023-10-29 03:55:32 28 4
gpt4 key购买 nike

有没有人为 UserManagerRoleManager 想出一个成功的模拟解决方案?我整天都在用头撞墙。我想要做的就是模拟对象以使用内存集合而不是访问 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com