我的MongoDbRepository
有一个名为IRepository
的界面。所以我在嘲笑设置UpdateOneAsync
方法的界面。但是我的MerchantConfigurationRepository
只能使用MongoDbRepository
对象,这就是我需要投射它的原因。出于某种原因,当我这样做时
(MongoDBRepository<MerchantConfigurationEntity>)dataAccess.Object
我收到错误
无法将'Castle.Proxies.IRepository`1Proxy'类型的对象转换为 输入'Newgistics.Common.MongoDb.MongoDBRepository`1
我应该如何设置Mock然后传入对象,我尝试将变量设置为dataAccess.Object
并传入该变量,但如果我这样做,则设置为{{1 }}。
您将在下面找到单元测试:
null
答案 0 :(得分:1)
由于这个原因,你的课程应该依赖于抽象而不是结果。 MerchantConfigurationRepository
应该依赖IRepository<MerchantConfigurationEntity>
而不是实施MongoDBRepository<MerchantConfigurationEntity>
public class MerchantConfigurationRepository {
private readonly IRepository<MerchantConfigurationEntity> repository;
public MerchantConfigurationRepository(IRepository<MerchantConfigurationEntity> repositiry) {
this.repository = repository;
}
//...other code
public Task<int> UpdateMerchant(Merchant model) { ... }
}
现在,您可以更灵活地在单独测试时使用模拟的存储库。
var merchantRepo = new MerchantConfigurationRepository(dataAccess.Object);
确保你的DI知道在生产中使用实际的实现。