一、前言

使用Mock框架进行单元测试,能够使用当前系统已经开发的接口方法模拟数据。(未写完,慢慢完善)

二、例子

1.引用Moq

2.定义一个接口和方法作为测试

   public interface IAnimal
    {
        //创造动物,返回是否创造成功
        bool CreateAnimal(string name);

        //方法参数中有输出参数
        bool AnimalDance(string name, out string msg);

        string Eat(string food);

        int GetCount();

        int FindEven(int even);

        int FindRange(int num);

        string FindRegex(string str);

        string Name { get; set; }

    }

3.Test

 static void Main(string[] args)
        {

            Console.WriteLine("------------------------------------------------------------------------");
            //1.根据接口创建mock
            var mock = new Mock<IAnimal>();
            //2.配置将要模拟的方法,调用方法传入参数,当传入熊猫的时候返回true,其他参数则返回fale
            mock.Setup(a => a.CreateAnimal("熊猫")).Returns(true); ;
            //3.调用mock配置好的方法
            Console.WriteLine(mock.Object.CreateAnimal("熊猫"));  //true
            Console.WriteLine(mock.Object.CreateAnimal("大熊猫"));//false

            Console.WriteLine("------------------------------------------------------------------------");
            string msg = "跳舞";
            //配置将要模拟的方法,调用方法传入参数(也传入输出参数),当传入孔雀的时候返回true,其他参数则返回fale
            mock.Setup(a => a.AnimalDance("孔雀", out msg)).Returns(true);
            string outmsg = "";
            Console.WriteLine(mock.Object.AnimalDance("孔雀", out outmsg));  //true,输出参数为跳舞
            Console.WriteLine(outmsg);
            Console.WriteLine(mock.Object.AnimalDance("大孔雀", out outmsg));//false,输出参数为跳舞
            Console.WriteLine(outmsg);

            Console.WriteLine("------------------------------------------------------------------------");
            //配置调用方法的时候参数为白菜的时候抛出异常
            mock.Setup(a => a.Eat("白菜")).Throws(new ArgumentException("错了"));
            Console.WriteLine(mock.Object.Eat("青菜"));
            //Console.WriteLine(mock.Object.Eat("白菜")); //抛出异常

            Console.WriteLine("------------------------------------------------------------------------");
            //在每一次调用返回不同的值,callback()
            ;
            mock.Setup(a => a.GetCount()).Returns(() => count).Callback(() => count++);
            Console.WriteLine(mock.Object.GetCount());
            Console.WriteLine(mock.Object.GetCount());
            Console.WriteLine(mock.Object.GetCount());
            Console.WriteLine(mock.Object.GetCount());

            Console.WriteLine("------------------------------------------------------------------------");
            //无论输入什么字符串,都是输出食物两个字 It.IsAny<string>()
            mock.Setup(a => a.Eat(It.IsAny<string>())).Returns((string s) => "食物");
            Console.WriteLine(mock.Object.Eat("面包"));

            Console.WriteLine("------------------------------------------------------------------------");
            //输入的数字是偶数,则返回该数字本身,否则为默认值0   It.Is<int>
            mock.Setup(a => a.FindEven(It.Is< == ))).Returns((int b) => b);
            ; i < ; i++)
            {
                Console.WriteLine(mock.Object.FindEven(i));
            }

            Console.WriteLine("------------------------------------------------------------------------");
            //匹配范围的值  It.IsAny<string>()
            mock.Setup(a => a.FindRange(It.IsInRange<, , Range.Inclusive))).Returns((int b) => b);
            ; i < ; i++)
            {
                Console.WriteLine(mock.Object.FindRange(i));
            }

            Console.WriteLine("------------------------------------------------------------------------");
            //匹配正则表达式  It.IsAny<string>()
            mock.Setup(a => a.FindRegex(It.IsRegex("[4-7]"))).Returns((string b) => b);
            Console.WriteLine(mock.Object.FindRegex("));
            Console.WriteLine(mock.Object.FindRegex("));  //只有5符合,只输出5
            Console.WriteLine(mock.Object.FindRegex("));

            Console.WriteLine("------------------------------------------------------------------------");
            //属性
            mock.Setup(s => s.Name).Returns("属性哦");
            Console.WriteLine(mock.Object.Name);

            Console.ReadKey();
        }

Mock测试框架的更多相关文章

  1. mock测试框架Mockito

    无论是敏捷开发.持续交付,还是测试驱动开发(TDD)都把单元测试作为实现的基石.随着这些先进的编程开发模式日益深入人心,单元测试如今显得越来越重要了.在敏捷开发.持续交付中要求单元测试一定要快(不能访 ...

  2. java的mock测试框架

    无论是敏捷开发.持续交付,还是测试驱动开发(TDD)都把单元测试作为实现的基石.随着这些先进的编程开发模式日益深入人心,单元测试如今显得越来越重要了.在敏捷开发.持续交付中要求单元测试一定要快(不能访 ...

  3. Mock测试框架(Mockito为例)

    在做单元测试的时候,有的时候用到的一些类,我们构造起来不是那么容易,比如HttpRequest,或者说某个Service依赖到了某个Dao,想构造service还得先构造dao,这些外部对象构造起来比 ...

  4. 前端测试框架Jest系列教程 -- Mock Functions

    写在前面: 在写单元测试的时候有一个最重要的步骤就是Mock,我们通常会根据接口来Mock接口的实现,比如你要测试某个class中的某个方法,而这个方法又依赖了外部的一些接口的实现,从单元测试的角度来 ...

  5. 前端测试框架Jest系列教程 -- Mock Functions(模拟器)

    写在前面: 在写单元测试的时候有一个最重要的步骤就是Mock,我们通常会根据接口来Mock接口的实现,比如你要测试某个class中的某个方法,而这个方法又依赖了外部的一些接口的实现,从单元测试的角度来 ...

  6. 【IDEA】单元测试:项目中引入JUnit测试框架+Mock简单了解

    一.Junit 使用和说明: 参考:单元测试第三弹--使用JUnit进行单元测试-HollisChuang's Blog http://www.hollischuang.com/archives/17 ...

  7. Python3-unittest测试框架之Mock接口联调

    unittest测试框架之Mock接口联调 unittest.mock 是一个用于测试的Python库.它允许使用mock对象替换受测试系统的部分,并对它们如何已经被使用进行断言. Mock使用前提 ...

  8. Python几种常用的测试框架

    一.测试的常用规则 一个测试单元必须关注一个很小的功能函数,证明它是正确的: 每个测试单元必须是完全独立的,必须能单独运行.这样意味着每一个测试方法必须重新加载数据,执行完毕后做一些清理工作.通常通过 ...

  9. Android开源测试框架学习

    近期因工作需要,分析了一些Android的测试框架,在这也分享下整理完的资料. Android测试大致分三大块: 代码层测试 用户操作模拟,功能测试 安装部署及稳定性测试 代码层测试 对于一般java ...

随机推荐

  1. 严重: Exception starting filter struts2 --Unable to load configuration

    严重: Exception starting filter struts2 Unable to load configuration. - [unknown location] at com.open ...

  2. Rect

    判断给定的点是否被一个CGRect包含,可以用CGRectContainsPoint函数   BOOL contains = CGRectContainsPoint(CGRect rect, CGPo ...

  3. Lucene文件扩展名

    名称 文件后缀 描述 段文件(Segments File) segments.gen segments_N 存储提交点信息 锁文件(Lock File) write.lock 用来阻止多个indexW ...

  4. C#设置按钮三态背景图片

    1.闪电事件,注意添加手动或者点击按钮->属性中的闪电->下面对应各种事件 在上面: private void button1_MouseHover(object sender, Even ...

  5. PAT 65. A+B and C (64bit) (20)

    题目链接:http://pat.zju.edu.cn/contests/pat-a-practise/1065 思路分析: 1)对a+b造成的long long 类型的数据溢出进行特殊处理: a> ...

  6. SharpZipLib 压缩文档下载

    using ICSharpCode.SharpZipLib.Zip; Response.Clear(); Response.ClearContent(); Response.ClearHeaders( ...

  7. Python核心编程(第七章)--映像和集合类型

    字典:它是一个容器类型,能存储任意个数的Python对象,也包括其他容器类型,Python的字典是作为可变的哈希表实现的 映像类型中的数据是无序排列的   可以用工厂方法dict()来创建字典,也可以 ...

  8. 帮小黎解决问题C++巩固获得数字每个位置上的数

    现在有一个数字 a= 12345; 想要取得这个数字上的没一个数字 使用 除法 +模除 的方法可以获得 原理:除(/)得到的是商     模除(%)的到的是余数 采用这种方式,先将要求的数的某一位   ...

  9. [POJ] 3264 Balanced Lineup [ST算法]

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 34306   Accepted: 16137 ...

  10. stm32的FSMC

    之前用的stm32f103rbt6,它是100引脚以内的,不带FSMC.驱动液晶屏或者SRAM要自己写时序方面的程序,比较麻烦.后来换成stm32f103zet6,带有FSMC.不过在学习FSMC的时 ...