【问题标题】:Unit test for SQL sequenceSQL 序列的单元测试
【发布时间】:2021-10-31 02:21:51
【问题描述】:

亲爱的,

我使用外部方法从序列中生成值,类似代码Getting "NEXT VALUE FOR" for a SQL Server sequence using EF Core 3.1

现在我正在编写一个单元测试用例来从序列中获取下一个值,但我得到了这个错误

无法解析类型“Microsoft.EntityFrameworkCore.Update.IUpdateSqlGenerator”的服务。这通常是因为没有为此 DbContext 配置数据库提供程序。可以通过覆盖“DbContext.OnConfiguring”方法或在应用程序服务提供程序上使用“AddDbContext”来配置提供程序。如果使用了“AddDbContext”,那么还要确保您的 DbContext 类型在其构造函数中接受 DbContextOptions 对象并将其传递给 DbContext 的基本构造函数。

我如何解决此问题并感谢您的宝贵时间

【问题讨论】:

  • 我不知道确切的问题,但您可能错过了对将 SQL Server 设置为数据库提供程序的 UseSqlServer 方法的调用。
  • 我使用“UseInMemoryDatabase”所以我等待模拟这个外部方法
  • 我建议为数据库编写集成测试而不是单元测试。内存数据库甚至可能不支持自定义序列。您不能期望内存数据库的行为与 SQL Server 完全相同
  • 感谢您的支持,有什么办法可以模拟这个外部方法吗?
  • 哪种外部方法?

标签: c# unit-testing entity-framework-core xunit


【解决方案1】:

我认为您无法使用 SQL Server 进行单元测试,因为单元测试与代码中方法的功能有关。这就是我们模拟接口之类的东西的原因。

如果您想测试与任何数据库提供程序相关的功能,您应该尝试按照@Navjot 的建议编写集成测试。

【讨论】:

    【解决方案2】:

    InMemory 提供程序不是关系提供程序,如果您想测试关系构造,请使用真正的数据库引擎。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      • 2019-08-06
      • 2012-03-05
      相关资源
      最近更新 更多