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 @ 2017-12-28 17:26 张占岭 阅读(...) 评论(...) 编辑 收藏