我有一个存储库方法如下:
public ICollection<TEntity> Find(Expression<Func<TEntity, bool>> where)
{
return Set.Where(where).ToList();
}
Set
是一个EntityFramework DbSet<TEntity>
对此方法进行单元测试的最佳方法是什么?我可以模拟DbSet<TEntity>
来轻松返回一些虚拟数据,但我并不完全确定这种方法的有效或有价值的测试是什么。
例如,我可以测试返回类型是否正确,并且为一个明显永远不会满足的谓词返回一个空集合,但是我应该运行哪些其他测试?
我是否应该编写一个测试来传递一个总是为true的表达式来测试真实条件,另一个测试传递一个总是为false的表达式来测试错误条件?
答案 0 :(得分:2)
当您模拟Set
时,在有效 可以进行测试的方法中没有更多内容。然后,该方法仅包含模拟,仅此而已。如果Set
只是模拟,则Where
的调用也会根据您设置模拟的方式返回任何虚拟数据。因此,您实际上正在测试您的模拟是否以您想要的方式进行模拟,而不是使用该模拟中的检索数据来执行正确的操作。由于您对此数据的处理很简单(只需在其上调用ToList
),因此无需在此处进行任何测试。
但是您应该考虑实际构建的Expression
是正确的,但是您不会在该方法的测试中执行此操作,但是在调用代码的测试中。