目前,我正在对上下文方法进行重构测试,以不再需要真实的数据库。我使用Ef Core。
因此,我通读了Microsoft文档,了解如何测试上下文方法。我首先找到了有关EF6测试的文档,然后阅读了有关EfCore的文档。
以下是链接:
我发现有趣的是,EF6和EF Core有不同的最佳实践。
对于EF6,Microsoft建议将Moocking上下文与Moq一起使用或编写自己的测试双打。 因此,两次都嘲弄上下文。
对于EF Core,Microsoft建议使用Sqlite或内置的InMemory数据库。
用Moq模拟上下文对于我来说似乎很合理。我只想测试这些方法的功能。之后,我仍然必须进行集成测试。为什么不再以推荐的方式使用EF Core? 更普遍地说,使用不同方法的优点或问题是什么?
答案 0 :(得分:1)
仔细看看同一篇文章中的以下引文...
SQLite内存模式允许您针对行为类似于关系数据库的提供程序编写高效的测试。
这为您提供了恒定且不变的测试数据,以及关系数据库的问题和行为。它更接近实际的现实生活场景。
另一方面,模拟为您提供了一个实现,您可以在其中更改与任何其他模型的关系,因此它的用途更加广泛。由于EF是针对db的,而您正在针对EF进行测试,因此选择第一个选项非常有意义。通常,您甚至不需要测试诸如基因库等琐碎的操作。
请确保在更高级别(消耗存储库等的类)进行测试时,使用模拟,因为您希望模拟没有接口且不应与具体实现耦合的接口。