如何模拟 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