Nunit 将Moq与Windsor一起使用——Moq.Mock[IFoo]类型的对象无法转换为IFoo

Nunit 将Moq与Windsor一起使用——Moq.Mock[IFoo]类型的对象无法转换为IFoo,nunit,castle-windsor,moq,Nunit,Castle Windsor,Moq,我正在尝试建立一些Moq存储库,以测试我的服务,并将Castle Windsor作为我的IOC。Mu服务依赖于IFoo,因此我正在创建一个实现IFoo的moq实例,并将其注入容器中,如下所示: _container.AddComponent("AutoBill", typeof (AutoBillService), typeof (AutoBillService)); var mockUserRepository = new Mock<IUserRepository>();

我正在尝试建立一些Moq存储库,以测试我的服务,并将Castle Windsor作为我的IOC。Mu服务依赖于IFoo,因此我正在创建一个实现IFoo的moq实例,并将其注入容器中,如下所示:

_container.AddComponent("AutoBill", 
  typeof (AutoBillService), typeof (AutoBillService));

var mockUserRepository = new Mock<IUserRepository>();
var testUser = new User()
   {
     FirstName = "TestFirst",
     LastName = "TestLast", 
     UID=1
   };
mockUserRepository.Setup(repo => repo.GetUser(testUser.UID))
   .Returns(testUser);

_container.Kernel.AddComponentInstance("UserRepository", 
   typeof(IUserRepository), mockUserRepository);

var service = _container.Resolve<AutoBillService>(); //FAIL
\u container.AddComponent(“自动填充”,
类型(自动付费服务),类型(自动付费服务);
var mockUserRepository=new Mock();
var testUser=新用户()
{
FirstName=“TestFirst”,
LastName=“TestLast”,
UID=1
};
mockUserRepository.Setup(repo=>repo.GetUser(testUser.UID))
.Returns(testUser);
_container.Kernel.AddComponentInstance(“UserRepository”,
typeof(IUserRepository),mockUserRepository);
var服务=_container.Resolve()//失败
这样做给了我一个例外: System.ArgumentException:类型为“Moq.Mock`1[IUserRepository]”的对象无法转换为类型为“IUserRepository”


有人知道我做错了什么吗?

你应该通过
mockUserRepository.Object
而不是
mockUserRepository

如果使用强类型API,这将更加明显:

_container.Register(Component
    .For<IUserRepository>()
    .Instance(mockUserRepository.Object));
\u容器寄存器(组件
.对于()
.Instance(mockUserRepository.Object));

之所以编译,是因为对象属性实现了IUserRepository。

我在Castle Windsor中遇到了同样的问题。 使用以下方法进行二元初始化:

container.Register(Component.For<IUserRepository>()
         .Instance(mockUserRepository.Object));
container.Register(Component.For())
.Instance(mockUserRepository.Object));
直到我从caslteRepository.config文件中删除预初始化的存储库(如您的IUserRepository)并将容器从存储库中保留为“空”后,才开始工作