C#单元测试--如何使用moq.mock进行依赖注入

在netcore出来之前的单元测试,调用每个接口都只需要遵循“调用方法,传入参数”这个基本逻辑即可完成单元测试。

但是在使用ASP.Net Core 系列框架之后,开发人员广泛使用依赖注入的方式来传输配置文件,或是某些依赖服务,这对于单元测试无疑是重大的障碍。因为Web项目的本体在原则上来讲是不能将单元测试作为依赖项的,所以不方便进行依赖注入。

在这样的背景之下,单元测试需要引入Mock一个概念。Mock的作用的是什么呢?就是模拟模仿依赖注入的内容,通过提前声明的方式,来模拟程序调用到依赖注入的一些内容(包括配置文件,特定的实例等)

下面根据实际问题来进行学习一下:

//现在要对如下一个使用IConfiguration接口依赖注入的Service进行单元测试的编写 public class DictionaryService : IDictionaryService { private IConfiguration _conf; public DictionaryService(IConfiguration conf) { _conf = conf; } public string GetDic() { return _conf.GetSection("Dictionary").Value; } } public class DicTest { private DictionaryService _serv = new DictionaryService(???); //在示例化测试Service类的时候我们会发现要传入一个IConfiguration接口的依赖注入,但是不方便去实现,要怎么办呢? }

在这种情况下我们就要用到moq.mock来实现对DictionaryService 用到的配置文件进行模拟,改为如下:

using Moq; public class DicTest { private DictionaryService _serv; public DictionaryTest() { //在Mock中传入需要模拟的类型 var mockConf = new Mock<IConfiguration>(); //对于在方法中所有使用的到的实例化方法都需要进行模拟,并传入返回值 mockConf.Setup(_ => _.GetSection("Dictionary").Value).Returns("this is a dic"); _serv = new DictionaryService(mockConf.Object);//最后再实例化DictionaryService类就可以了 } }

基本上学会了使用这一套方法就可以模拟各种类型的依赖注入了,一招鲜吃遍天。

PS:其实做单元测试先要对代码的运行逻辑,以及各种微服务都了解的情况下才方便进行依赖注入。


__EOF__

本文作者野菊花
本文链接https://www.cnblogs.com/Jackyye/p/15691128.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   野菊花  阅读(1246)  评论(3编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示