如何将Lambda表达式作为参数的单元测试存储库方法

时间:2017-03-03 12:29:54

标签: c# .net unit-testing

我有一个存储库方法如下:

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

Set是一个EntityFramework DbSet<TEntity>

对此方法进行单元测试的最佳方法是什么?我可以模拟DbSet<TEntity>来轻松返回一些虚拟数据,但我并不完全确定这种方法的有效或有价值的测试是什么。

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

我是否应该编写一个测试来传递一个总是为true的表达式来测试真实条件,另一个测试传递一个总是为false的表达式来测试错误条件?

1 个答案:

答案 0 :(得分:2)

当您模拟Set时,在有效 可以进行测试的方法中没有更多内容。然后,该方法仅包含模拟,仅此而已。如果Set只是模拟,则Where的调用也会根据您设置模拟的方式返回任何虚拟数据。因此,您实际上正在测试您的模拟是否以您想要的方式进行模拟,而不是使用该模拟中的检索数据来执行正确的操作。由于您对此数据的处理很简单(只需在其上调用ToList),因此无需在此处进行任何测试。

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

相关问题