欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-26 12:27:40
回到目录 当我们进行软件开发时,一般会写单元测试,而对于业务情景来说,一般是测试它的业务逻辑准确性,对于你的测试数据是否来自数据库还是文件,是否为真实还是模拟,并不是很关心!我关心的就是我的业务逻辑是否正确! 所以我们的单元测试在调用底层接口时,尤其是数据持久层的接口时,一般可以使用mock的方式, ......

回到目录

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

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

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

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

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

一个标准的接口,它的实现可能是从数据库返回一个集合,而在测试用例里,我只使用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是否实现,我们只关心它的输入参数和返回值,只要业务层调用它时,输入参数匹配它就可以返回遇期的结果!这才是

最重要的事!

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

感谢各位的阅读!

CI、CD我们还在继续!

回到目录