用FakeItEasy伪造nHibernate会话

|| 我想使用FakeItEasy将伪造的nHibernate会话注入到我的存储库中,然后返回测试中预定义的对象列表。有人有这样做的经验吗? 这是示例测试:
[TestFixture]
public class ProductionRepositoryTester
{
 private ProductionRepository _productionRepository;

[SetUp]
public void SetupFixture()
{
    const string propertyNumber = \"123\";
    Tank tank = new Tank { PropertyNumber = propertyNumber };

    var session = A.Fake<ISession>();
    var sessionFactory = A.Fake<ISessionFactory>();

    A.CallTo(session).WithReturnType<IList<Tank>>().Returns(new List<Tank> { tank });

    _productionRepository = new ProductionRepository(session, sessionFactory);
}

[Test]
public void ProductionRepositoryCanGetTanks()
{
    var tanks = _productionRepository.GetTanks();

    Assert.AreNotEqual(0, tanks.Count(), \"Tanks should have been returned.\");

}
}
这是实际ProductionRepository类中的调用:
public IEnumerable<Tank> GetTanks()
{
    var tanks = Session.CreateCriteria(typeof(Tank)).List<Tank>();
    return tanks;
}
在此先感谢您的任何建议!     
已邀请:
        首先,我建议不要伪造NHibernate接口,(我认为)这对于单元测试来说太低了。针对这些情况进行一些集成测试可能更好。换句话说,单元测试所有与ProductionRepository(IProductionRepository)的抽象的交互,但要在此停止。但是,现在这只是我的意见,如果您确实要执行此操作,我认为您必须更改您的伪造设置: 会话返回条件,而不直接返回IList。因此,您也必须有一个虚假的条件:
var fakeCriteria = A.Fake<ICriteria>();

A.CallTo(fakeCriteria).WithReturnType<IList<Tank>>().Returns(new List<Tank> { tank });

A.CallTo(session).WithReturnType<ICriteria>().Returns(fakeCriteria);
(我希望我记得正确的条件类型,我认为这是ICriteria,但我不确定百分百。)     

要回复问题请先登录注册