单元测试 IQueryable
我正在尝试为采用 IQueryable 集合的方法编写单元测试。
在将集合传递给测试方法之前,我应该如何在单元测试中实例化该集合?这是我测试中的默认代码
IQueryable<Item> Items = null; // TODO: Initialize to an appropriate value
这是我尝试编写的
IQueryable<Item> Items = new IQueryable<Item>; // TODO: Initialize to an appropriate value
我犯了一个小学生错误吗?
I am trying to write a unit test for a method which takes an IQueryable collection.
How should I instantiate the collection in my unit test before I pass it to the method for test? This is the default code in my test
IQueryable<Item> Items = null; // TODO: Initialize to an appropriate value
And here is what I tried writing
IQueryable<Item> Items = new IQueryable<Item>; // TODO: Initialize to an appropriate value
Am I making a school boy error?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
好吧,您可以在任何类型化集合/列表/数组上使用
.AsQueryable()
,但是在我看来,您无法对此进行单元测试,因为不同的查询提供商支持不同的选项/方法。您只能对此进行集成测试。任何单元测试(尤其是使用对象的单元测试)都很少或根本无法证明您的系统。Well, you can use
.AsQueryable()
on any typed collection/list/array, however IMO you cannot unit test this, as different query providers support different options/methods. You can only integration-test this. Any unit test (especially one using objects) does little or nothing to prove your system.IQueryable 似乎是一个接口( http://msdn.microsoft. com/en-us/library/system.linq.iqueryable.aspx ),您不应该尝试实例化一个实现此接口的类(或者可能使用模拟对象进行测试)吗?
IQueryable seems to be an interface ( http://msdn.microsoft.com/en-us/library/system.linq.iqueryable.aspx ), shouldn't you try to instanciate a class that implements this interface instead (or maybe use a mock object for your test) ?
最好的方法是使用一种模式,让您测试来自数据库的 IQueryable 响应,例如 工作单元和存储库模式
创建用于单元测试的模拟存储库的最佳方法是使用内存存储库,但是您还可以使用 Moq 或任何其他假存储库。
Best way is to use a pattern that let's you test IQueryable responses from a database such as the Unit of work and repository pattern
The best way to create a mock repository to use in unit testing is with a memory repository, but you can also use Moq or any other fake repository library.