【问题标题】:EF Core, EF 6 and the different testing methodsEF Core、EF 6 和不同的测试方法
【发布时间】:2019-12-20 11:05:39
【问题描述】:

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

所以我通读了 Microsoft 文档如何测试上下文方法。我首先找到了 EF6 测试的文档,然后阅读了 EfCore 的文档。

以下是链接:

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

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

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

用 Moq 模拟上下文对我来说似乎很合理。我只想测试这些方法的功能。无论如何,我必须在之后进行集成测试。为什么不再采用 EF Core 的推荐方式? 更一般地说,不同方法的优点或问题是什么?

【问题讨论】:

标签: c# entity-framework unit-testing .net-core entity-framework-core


【解决方案1】:

仔细看看同一篇文章中的以下引述...

SQLite 内存模式允许您针对行为类似于关系数据库的提供程序编写有效的测试。

这为您提供了持续不变的测试数据,以及关系数据库问题和行为。它更接近实际的现实生活场景。

另一方面,Mocking 为您提供了一种实现,您可以在其中将关系更改为任何其他模型,因此它更加通用。

由于 EF 用于 db,而您正在为 EF 进行测试,因此使用第一个选项非常有意义。通常情况下,您甚至不需要测试基因库等琐碎的操作。

确保在更高级别(使用存储库的类等)上进行测试时,您使用模拟,因为您想模拟与具体实现没有也不应该有任何耦合的接口。

【讨论】:

  • 您是指通用存储库吗?
  • 非常感谢。那么 EF6 和 EFCore 文档中的差异可能只是来自不同作者的工件?我对他们的差异感到有些困惑。
  • 是的,自动更正。在不同的棱镜下,差异大多是相同的方面。 Ef core 提到了两者,但更喜欢 sql lite,因为它在测试 ef core 特定实现时更接近现实。
猜你喜欢
  • 1970-01-01
  • 2021-04-14
  • 2021-09-19
  • 2016-10-10
  • 1970-01-01
  • 2021-04-20
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
相关资源
最近更新 更多