gpt4 book ai didi

unit-testing - 如何在 .net 核心中测试 Dapper 查询?

转载 作者:行者123 更新时间:2023-12-04 01:13:50 25 4
gpt4 key购买 nike

使用针对完整 .net 框架的代码,我可以模拟一个 IDbConnection 和 point it at a mocked DataSet为了测试我的查询是否正确执行。同样,如果我使用的是 EntityFramework 6,我可以有一个 mocked DbSet返回 IQueryables 并针对它测试我的数据层逻辑。

然而 .net 核心 doesn't support DataSets (尽管这可能会改变 in the future ?)。

同时,有没有办法创建一个对象集合,dapper 可以使用 IDbConnection 查询以测试查询逻辑?

最佳答案

不,所有 Dapper 东西都是 IDbConnection 之上的扩展方法类(class)。
这个( IDbConnection )没有 InMemory 实现(可以理解 SQL 字符串)。
但是,如果您想完全自主地运行它,最好的选择是在每次运行单元测试时启动一个新的 sql 服务器。这可以通过微软为 sqlserver 制作的 docker 镜像轻松完成:https://hub.docker.com/r/microsoft/mssql-server-linux/
或者...
或者迁移到 Entity Framework ,它们允许您针对内存中的后备存储进行单元测试。
为什么?
Dapper 只包含一些有用的功能来生成 SQL。它绝不是从 SQL 中抽象出来的。而 sql 只是 C# 代码的纯文本。它不解析它,也不执行它。因此,如果不使用其背后的数据库,您就无法对您的 sql/dapper 代码进行单元测试。
Entity Framework 的做法不同。它试图将您想要在数据库中执行的所有操作转换为 C# 代码/抽象(例如 IDbCollection)。然后他们制作了 1 个生成 sql 代码的实现和一个使用内存后备存储的实现。这样您就可以对代码进行单元测试。
微软的解决方案
微软经常使用 Repository Pattern 做广告。 .这基本上是一个昂贵的词,用于将所有数据库调用/命令抽象为一个单独的类并连接这些类,并在代码中的任何地方使用接口(interface)(使用依赖注入(inject))。现在您可以编写单元测试来测试您对 sql 查询期望的所有代码,对于这个接口(interface),您可以模拟来测试该方法是否被实际调用。

关于unit-testing - 如何在 .net 核心中测试 Dapper 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43530623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com