EF Core、EF 6以及不同的测试方法

3

目前我正在重构我的上下文方法测试,以便不再需要实际的数据库。我使用 Ef Core。

因此我阅读了微软文档,了解如何测试上下文方法。我先阅读了 EF6 测试的文档,然后是 EF Core 的文档。

以下是链接:

我觉得有趣的是 EF6 和 EF Core 有不同的最佳实践。

对于 EF6,Microsoft 建议使用 Moq 模拟上下文或编写自己的测试替身。所以两次都是模拟上下文。

对于 EF Core,Microsoft 建议使用 Sqlite 或内置的 InMemory 数据库。

对我来说,使用 Moq 来模拟上下文似乎很合理。我只想测试方法的功能。不管怎样,之后我还必须进行集成测试。为什么这不是在 EF Core 中的推荐方式呢?总的来说,不同方法有哪些优缺点呢?


您的问题(为什么列表上的范围不起作用)已被删除,但我仍然想分享这些链接,您可能会发现有趣阅读- https://github.com/dotnet/runtime/issues/21727 https://github.com/dotnet/runtime/issues/27061 - Rand Random
1个回答

1
请仔细查看以下来自同一篇文章的引用:
SQLite内存模式允许您编写有效的测试,针对行为像关系型数据库的提供程序。这为您提供了不变的测试数据,但也存在着关系型数据库的问题和行为。它更接近实际的现实场景。
另一方面,模拟提供了一个实现,您可以将关系更改为任何其他模型,因此更加灵活。
由于EF是针对数据库的,而您正在为EF编写测试,因此选择第一种选项是完全合理的。通常情况下,您甚至不需要测试像基因库等微不足道的操作。
请确保在更高级别的测试(使用存储库等类)时使用模拟,因为您希望模拟没有并且不应该与具体实现有任何耦合的接口。

你是指通用存储库吗? - HrkBrkkl
非常感谢。那么EF6和EFCore文档中的差异只是因为不同的作者编写造成的吗?它们的差异让我有点困惑。 - HrkBrkkl
1
是的,自动纠正。这些差异大多是在不同的视角下看待同一方面。Ef core提到了两者,但更喜欢使用sql lite,因为它更接近于测试ef core特定实现时的实际情况。 - Athanasios Kataras

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接