DotNetCore跨平台~Moq框架实现模拟测试

回到目录

当我们进行软件开发时,一般会写单元测试,而对于业务情景来说,一般是测试它的业务逻辑准确性,对于你的测试数据是否来自数据库还是文件,是否为真实还是模拟,并不是很关心!我关心的就是我的业务逻辑是否正确!

所以我们的单元测试在调用底层接口时,尤其是数据持久层的接口时,一般可以使用mock的方式,即模拟一个接口,期望的参数和期望的结果就够了,而没有必要真正去连接数据库,事实上,在业务测试里,使用真实的数据库没有什么意义!无非是加大测试的复杂度!

一个不错的mock测试工具 Moq,它在nuget上已经有了正式版,大家可以下载使用

下面介绍如何使用这个工具,我们以一个最简单的例子来说一下,例如有一个接口,里面一个方法,方法有输入参数和返回值,我们可以这样去模拟它的实现!

一个标准的接口,它的实现可能是从数据库返回一个集合,而在测试用例里,我只使用moq来干这事,你完全可以不写它的实现,先进行业务代码编写,这就是TDD!

    public interface IReport_BalanceStatementDao
    {
          IEnumerable<BalanceSheetReport> GetClosingBalance(int companyId, DateTime relateDate);
    }

测试用例可以这样去设计

复制代码
            _report_BalanceStatementDao = new Moq.Mock<IReport_BalanceStatementDao>();
            _report_BalanceStatementDao.Setup(p => p.GetClosingBalance(270, new DateTime(2017, 10, 31))).Returns(() =>
            {
                return _balanceSheetReportList;
            });
            _report_BalanceStatementDao.Setup(p => p.GetClosingBalance(270, new DateTime(2017, 9, 30))).Returns(() =>
            {
                return _balanceSheetReportList;
            });
            _balanceStatementService = new BalanceStatementService(_report_BalanceStatementDao.Object);
复制代码

运行你的测试用例,我们事实上并不GetClosingBalance是否实现,我们只关心它的输入参数和返回值,只要业务层调用它时,输入参数匹配它就可以返回遇期的结果!这才是

最重要的事!

感谢各位的阅读!

CI、CD我们还在继续!

回到目录

 

posted @   张占岭  阅读(1141)  评论(0编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
历史上的今天:
2015-12-28 Lind.DDD.UoW工作单元的实现
2015-12-28 Lind.DDD.Repositories.Redis层介绍
2015-12-28 Lind.DDD.Repositories.Mongo层介绍
2012-12-28 Js~数组的操作push,pop,shift,unshift
2011-12-28 基础才是重中之重~你是否真正理解static对象
点击右上角即可分享
微信分享提示