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

标签 c# entity-framework unit-testing moq asp.net-identity

有没有人为 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/

相关文章:

unit-testing - 为什么 Controller 单元测试会启动 DI?

android - 为什么 Gradle 能够模拟 final类?

c# - 服务未响应控制功能(错误 2186)

C# CR 后必须跟 LF

c# - 如何在Unity中从Uri.fromfile转换为FileProvider.getUriForFile?

c# - 如何使用 Entity Framework 将二进制图像从数据库加载到asp.net(无MVC)中的imagebox.imageurl

javascript - 如何在 Jasmine/Angularjs 中对下拉列表进行单元测试

c# - 正确使用 C# 事件处理程序

c# - 如何告诉 Entity Framework Function Import 存储过程返回的列不可为空?

c# - 是否可以在没有外键的情况下设置导航属性?