我正在try 使用Moq创建一个单元测试,它测试MongoDB.AspNet.Identity V2个提供者.这句话让我感到悲伤:

var appUser = new Mock<PreRegistrationMVC.Models.ApplicationUser>();
var userStore = new Mock<MongoDB.AspNet.Identity.UserStore<PreRegistrationMVC.Models.ApplicationUser>>();

似乎userStore无法正确实例化,这里是错误.

Castle.DynamicProxy.InvalidProxyConstructorArgumentsException was unhandled by user code
  HResult=-2147024809
  Message=Can not instantiate proxy of class: MongoDB.AspNet.Identity.UserStore`1[[MVC.Models.ApplicationUser, MVC, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].
Could not find a parameterless constructor.
  Source=Moq
  StackTrace:
       at Castle.DynamicProxy.ProxyGenerator.CreateClassProxyInstance(Type proxyType, List`1 proxyArguments, Type classToProxy, Object[] constructorArguments)
       at Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type classToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options, Object[] constructorArguments, IInterceptor[] interceptors)
       at Moq.Proxy.CastleProxyFactory.CreateProxy(Type mockType, ICallInterceptor interceptor, Type[] interfaces, Object[] arguments)
       at Moq.Mock`1.<InitializeInstance>b__2()
       at Moq.PexProtector.Invoke(Action action)
       at Moq.Mock`1.InitializeInstance()
       at Moq.Mock`1.OnGetObject()
       at Moq.Mock.GetObject()
       at Moq.Mock.get_Object()
       at Moq.Mock`1.get_Object()
       at MVC_Tests.Identity.Accounts.AccountController_Test.TestSuccessfulRegister() in c:\Users\Tim\Documents\Visual Studio 2013\Projects\PreRegistrationApp\MVC_Tests\Identity\Accounts\AccountController_Test.cs:line 108
  InnerException: 

我对Moq完全陌生,所以我正在寻找:

谢谢你的阅读.

推荐答案

MOQ很适合模拟接口,但在具体类中却不太适用.因此,与其嘲笑混凝土类,不如要求提供接口:

var userStore = new Mock<IUserStore<PreRegistrationMVC.Models.ApplicationUser>>();

ApplicationUser也应该是POCO,所以不需要模拟它,只需创建没有MOQ的实例并在测试中使用即可.

Mongodb相关问答推荐

从两个相连的文件中获取电话和邮箱的渠道是什么?

用Spring Boot查询MongoDB中的对象数组

在提供的文档(_Id)之后和之前,是否有一个Mongo操作来获取已排序(和/或过滤)集合中的文档计数?

Golang mongodb聚合错误:管道阶段规范对象必须包含一个字段

在对象mongodb的数组中查找元素

如何使用 MindsDB 和 MQL(对于我的 MongoDB 实例)实施零样本分类?

Meteor 方法与deny/allow 规则

为什么mongodb的文档中存储键名

oplog 在独立 mongod 上启用,不适用于副本集

获取收集字节使用情况统计信息的pymongo方法?

加载时将 mongo 存储的日期转换回自 Unix 纪元以来的毫秒数?

mongoose递归填充

在 Mongoid 中,Date、Time、DateTime 和 TimeWithZone 字段类型有什么区别吗?

Mongoose Schema vs Mongo Validator

在 Postgres JSON 数组中查询

MongoDB MapReduce - 发出一个键/一个值不调用reduce

如何匹配 MongoDB 聚合框架中的 undefined值?

无法在 mac os 10.9 上安装 mongodb php 驱动程序

对于社交网站(使用 Ruby on Rails 开发)来说,MongoDB 会是一个好主意吗?

MongoDB打印两点之间的距离