如何模拟 Nhibernate.ISession 查询 <T>
How to mock an Nhibernate.ISession Query<T>
static ContainerBuilder BaseSetupForMoq(EmptyInterceptor testInterceptor = null )
{
var containerBuilder = new ContainerBuilder();
{
var testrep= new MockHiber();
containerBuilder.Register(c => testrep.SessionOpen())
.As<ISession>()
.InstancePerRequest();
}
public ISession SessionOpen()
{
var session= new Mock<ISession>();
session.Setup(x => x.Query<User>()).Returns(User);
return session.Object;
}
代码行 'session.Setup(x => x.Query()).Returns(User);' 抛出错误
表达式引用了一个不属于模拟对象的方法:x => x.Query()
现在我已经研究并发现不能模拟 Query<> 等扩展方法,应该使用包装器。但这种方法也没有奏效,
如果能帮上忙,我将不胜感激。
你 return ISession
,而你的 Mock 是 Mock<ISessionLinq>
类型。如果将其更改为 ISessionLinq
,它应该可以工作。
public ISessionLinq test()
虽然你必须明白你不是在这里模拟 NHibernate,你模拟的是你自己的接口 ISessionLinq
static ContainerBuilder BaseSetupForMoq(EmptyInterceptor testInterceptor = null )
{
var containerBuilder = new ContainerBuilder();
{
var testrep= new MockHiber();
containerBuilder.Register(c => testrep.SessionOpen())
.As<ISession>()
.InstancePerRequest();
}
public ISession SessionOpen()
{
var session= new Mock<ISession>();
session.Setup(x => x.Query<User>()).Returns(User);
return session.Object;
}
代码行 'session.Setup(x => x.Query()).Returns(User);' 抛出错误 表达式引用了一个不属于模拟对象的方法:x => x.Query()
现在我已经研究并发现不能模拟 Query<> 等扩展方法,应该使用包装器。但这种方法也没有奏效,
如果能帮上忙,我将不胜感激。
你 return ISession
,而你的 Mock 是 Mock<ISessionLinq>
类型。如果将其更改为 ISessionLinq
,它应该可以工作。
public ISessionLinq test()
虽然你必须明白你不是在这里模拟 NHibernate,你模拟的是你自己的接口 ISessionLinq