Nec*_*ras 8 unit-testing dapper .net-core
使用针对完整.net Framework的代码,我可以模拟IDbConnection并将其指向模拟的DataSet,以便测试我的查询是否正确执行.同样,如果我使用EntityFramework 6,我可以让一个模拟的DbSet返回IQueryables并测试我的数据层逻辑.
但.net核心不支持DataSet(虽然将来可能会改变?).
与此同时,有没有办法创建一个对象集合,dapper可以使用IDbConnection进行查询以测试查询逻辑?
不,所有的小巧玲珑都是,在IDbConnection课堂上的扩展方法.
this(IDbConnection)没有InMemory实现(理解SQL字符串).
然而,你最好的选择是,如果你想完全自主地运行它,那么每次运行单元测试时都会启动一个新的sql server.这可以通过Microsoft为sqlserver制作的docker镜像轻松完成:https://hub.docker.com/r/microsoft/mssql-server-linux/
要么...
或者迁移到Entity框架,它们允许您针对内存中的后备存储进行单元测试.
Dapper只包含一些有用的功能来生成SQL.它绝不是远离SQL的摘要.而sql只是C#代码的纯文本.它不解析它,也不执行它.因此,你不能单独测试你的sql/dapper代码而不使用它背后的数据库.
实体框架以不同的方式实现.它试图将你想要在数据库中做的所有事情都变成C#代码/抽象(例如IDbCollection).然后他们创建了一个生成sql代码的实现和一个使用内存后备存储的实现.这样您就可以对代码进行单元测试.
Microsoft经常使用存储库模式进行广告宣传.这基本上是一个昂贵的词汇,用于将所有数据库调用/命令抽象到一个单独的类中并连接这些类,并在代码中使用各处的接口(使用依赖注入).现在,您可以编写单元测试来测试sql查询所需的所有代码,对于此接口,您可以使用mock来测试该方法是否实际被调用.
| 归档时间: |
|
| 查看次数: |
4196 次 |
| 最近记录: |