【问题标题】:Unit Test IQueryable单元测试 IQueryable
【发布时间】:2011-09-29 19:10:13
【问题描述】:

我正在尝试为采用 IQueryable 集合的方法编写单元测试。

在将集合传递给测试方法之前,我应该如何在单元测试中实例化集合?这是我测试中的默认代码

IQueryable<Item> Items = null; // TODO: Initialize to an appropriate value

这是我尝试写的内容

IQueryable<Item> Items = new IQueryable<Item>; // TODO: Initialize to an appropriate value

我犯了小学生的错误吗?

【问题讨论】:

  • 接口不能被实例化,而是模拟它们

标签: .net unit-testing generics collections iqueryable


【解决方案1】:

好吧,您可以在任何类型的集合/列表/数组上使用.AsQueryable(),但是 IMO 您不能对此进行单元测试,因为不同的查询提供程序支持不同的选项/方法。您只能对此进行集成测试。任何单元测试(尤其是使用对象的单元测试)都很少或根本无法证明您的系统。

【讨论】:

  • 但这会通过单元测试?? -- IQueryable Items = new IQueryable.AsQueryable();
  • @suggy1982 不,我的意思是你会用你的虚拟数据创建一个数组/列表/任何东西,并使用theList.AsQueryable() 这将起作用。然而,我重复一遍:我们的目标不仅仅是“通过测试”——我们应该害怕证明我们的系统有价值和有意义。由于IQueryable&lt;T&gt; 在实现之间存在很大差异,因此模拟/伪造此接口几乎没有任何作用。
  • @MarcGravell,创建单元测试并使用模拟来验证内部调用的顺序和参数可能很有用,如stackoverflow.com/questions/13686286/…所示
【解决方案2】:

IQueryable 似乎是一个接口 (http://msdn.microsoft.com/en-us/library/system.linq.iqueryable.aspx),您不应该尝试实例化一个实现此接口的类(或者使用模拟对象进行测试)吗?

【讨论】:

    【解决方案3】:

    最好的方法是使用一种模式来测试来自数据库的 IQueryable 响应,例如 Unit of work and repository pattern

    创建用于单元测试的模拟存储库的最佳方法是使用memory repository,但您也可以使用Moq 或任何其他假存储库库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-02
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      相关资源
      最近更新 更多