我有我的普通实体框架上下文,这就是这样:
public class LikvidoWebsitesApiContext : IdentityDbContext<ApplicationUser>, ILikvidoWebsitesApiContext
{
// code
}
我制作了一个接口,该接口具有我的DBSets
。
在我的普通解决方案中,我将其设置为 ninject 这样:
kernel.Bind<ILikvidoWebsitesApiContext>().To<LikvidoWebsitesApiContext>().InRequestScope();
我通过在构造函数中添加ILikvidoWebsitesApiContext
来使用服务中的上下文,然后我可以使用数据库。
我的问题是:如何在设备测试中进行设置?
我试图做以下操作:
kernel.Bind(typeof(ILikvidoWebsitesApiContext))
.To(typeof(Mock<LikvidoWebsitesApiContext>))
.Register(true);
(使用Moq
框架(
但是,这给出了:
system.invalidcastException:'无法施放类型的对象'moq.mock`1 [likvido.domain.services.data.likvidowebesitesapicontext]''>
哪个确实有意义,但是我不确定如何修复它?
快速查看ninject wiki,我遇到了
提供商,工厂方法和激活上下文
他们在哪里显示如何使用Provider
来构建实例。
按照Wiki中的建议,建议扩展Provider<T>
,其中包括强键入。
public MoqContextProvider : Provider<ILikvidoWebsitesApiContext> {
protected override ILikvidoWebsitesApiContext CreateInstance(IContext context) {
var mock = new Mock<ILikvidoWebsitesApiContext>();
// Set up of mock members
return mock.Object;
}
}
,然后只是插入容器
的问题kernel.Bind<ILikvidoWebsitesApiContext>().ToProvider(new MoqContextProvider());
也有关于使用工厂方法
的建议编写
IProvider
实现的更轻的替代品是将服务绑定到委托方法。
kernal.Bind<ILikvidoWebsitesApiContext>()
.ToMethod(context => {
var mock = new Mock<ILikvidoWebsitesApiContext>();
// Set up of mock members
return mock.Object;
});
提供的Func
将绑定到延期绑定的服务类型,并在需要新的实例(即ILikvidoWebsitesApiContext
(时拨打。
请记住,当使用量量时,您需要设置模拟的所需行为。