【问题标题】:NHibernate queryable unit testingNHibernate 可查询单元测试
【发布时间】:2012-02-25 14:54:21
【问题描述】:

在尝试模拟返回 IQueryable 的数据访问方法时,尝试对 NHibernate 和工作单元模式进行单元测试时遇到了难题?

这行得通:

var employee = Helper.GetEmployee();
Repository.Stub(x => x.FindById<Employee>(employee.Id)).Return(employee);

这不起作用:

var employee = Helper.GetEmployee();
var employeeList = new List<Employee> { employee };
Repository.Stub(x => x.All<Employee>().ToList()).Return(employeeList);

基本上,任何返回 > 1 名员工的东西我都无法模仿。

Repository FindById 方法返回:

Session.Get<TEntity>(id);

Repository 所有方法返回:

Session.Query<TEntity>();

mocked repository All方法的单元测试运行时,返回异常说source不能为null?

我卡住了,有什么想法吗?

谢谢! 蒂姆

【问题讨论】:

    标签: c# .net unit-testing nhibernate unit-of-work


    【解决方案1】:

    您是否尝试过以下操作。您的数据访问方法返回一个 IQueryable,但您试图模拟在结果上调用 ToList() 时返回的内容?你应该只是在嘲笑结果。

    Repository.Stub(x => x.All<Employee>()).Return(employeeList.AsQueryable<Employee>);
    

    【讨论】:

    • 嗨 Rich,我尝试了 .AsQueryable() 但没有使用类型转换。现在试一试,谢谢:)
    • 我假设您的数据层方法“All”返回 IQueryable,因此需要 AsQueryable
    • :( 运气不好 Rich。类型不是必需的,因为它实际上是从第一个方法调用中推断出来的 - Stub(x => x.All()) 仍然给我来源是 null
    • OK... 我可以让 .All 工作,但我刚刚意识到我正在使用 FilterBy :P 即使我正在设置它,以下内容仍返回 null:repository.Stub(x => x .FilterBy(e => e.Active && e.EmployeeID != Guid.Empty)).Return(employeeList.AsQueryable())
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 2013-11-26
    相关资源
    最近更新 更多