zoukankan      html  css  js  c++  java
  • 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我们还在继续!

    回到目录

  • 相关阅读:
    实战篇之实现 OutLook 中以 EDM 形式发送通知邮件
    ASP.NET MVC5 之路由器
    ASP.NET MVC5 之数据迁移
    说不出的烦
    ASP.NET MVC5 之 Log4Net 的学习和使用
    读取配置文件参数和文件路径
    序列化和反序列化示例
    面向对象之封装
    面向对象4之常用的乱七八糟
    面向对象三之继承和派生
  • 原文地址:https://www.cnblogs.com/lori/p/8136817.html
Copyright © 2011-2022 走看看