【问题标题】:How to Unit Test Repository Method That Takes Lambda Expression as A Parameter如何对以 Lambda 表达式为参数的存储库方法进行单元测试
【发布时间】:2017-07-23 13:35:36
【问题描述】:

我有一个仓库方法如下:

 public ICollection<TEntity> Find(Expression<Func<TEntity, bool>> where)
 {
        return Set.Where(where).ToList();
 }

Set 是一个实体框架DbSet&lt;TEntity&gt;

对该方法进行单元测试的最佳方法是什么?我可以模拟DbSet&lt;TEntity&gt; 以轻松返回一些虚拟数据,但我不完全确定什么是该方法的有效或有价值的测试。

例如,我可以测试返回类型是否正确,并且为显然永远不会满足的谓词返回一个空集合,但是我应该运行哪些其他测试?

我是否应该只编写一个通过始终为真的表达式来测试真条件的测试和另一个通过始终为假的表达式来测试假条件的测试?

【问题讨论】:

    标签: c# .net unit-testing


    【解决方案1】:

    当您模拟Set 时,该方法中没有其他内容可以有效地进行 测试。然后,该方法仅包含一个模拟,仅此而已。如果Set 只是一个模拟,则对Where 的调用也将根据您设置模拟的方式返回任何虚拟数据。因此,您实际上是在测试您的模拟是否以您想要的方式模拟,而不是您的方法来使用从模拟中检索的数据做正确的事情。由于您对这些数据所做的事情是微不足道的(只需调用ToList),因此无需在此处进行任何测试。

    但是您应该考虑到实际的Expression 是正确构建的,但是您不会在该方法的测试中执行此操作,而是在调用代码的测试中执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-19
      • 1970-01-01
      • 2017-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多