Mock测试框架
一、前言
使用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测试框架的更多相关文章
- mock测试框架Mockito
无论是敏捷开发.持续交付,还是测试驱动开发(TDD)都把单元测试作为实现的基石.随着这些先进的编程开发模式日益深入人心,单元测试如今显得越来越重要了.在敏捷开发.持续交付中要求单元测试一定要快(不能访 ...
- java的mock测试框架
无论是敏捷开发.持续交付,还是测试驱动开发(TDD)都把单元测试作为实现的基石.随着这些先进的编程开发模式日益深入人心,单元测试如今显得越来越重要了.在敏捷开发.持续交付中要求单元测试一定要快(不能访 ...
- Mock测试框架(Mockito为例)
在做单元测试的时候,有的时候用到的一些类,我们构造起来不是那么容易,比如HttpRequest,或者说某个Service依赖到了某个Dao,想构造service还得先构造dao,这些外部对象构造起来比 ...
- 前端测试框架Jest系列教程 -- Mock Functions
写在前面: 在写单元测试的时候有一个最重要的步骤就是Mock,我们通常会根据接口来Mock接口的实现,比如你要测试某个class中的某个方法,而这个方法又依赖了外部的一些接口的实现,从单元测试的角度来 ...
- 前端测试框架Jest系列教程 -- Mock Functions(模拟器)
写在前面: 在写单元测试的时候有一个最重要的步骤就是Mock,我们通常会根据接口来Mock接口的实现,比如你要测试某个class中的某个方法,而这个方法又依赖了外部的一些接口的实现,从单元测试的角度来 ...
- 【IDEA】单元测试:项目中引入JUnit测试框架+Mock简单了解
一.Junit 使用和说明: 参考:单元测试第三弹--使用JUnit进行单元测试-HollisChuang's Blog http://www.hollischuang.com/archives/17 ...
- Python3-unittest测试框架之Mock接口联调
unittest测试框架之Mock接口联调 unittest.mock 是一个用于测试的Python库.它允许使用mock对象替换受测试系统的部分,并对它们如何已经被使用进行断言. Mock使用前提 ...
- Python几种常用的测试框架
一.测试的常用规则 一个测试单元必须关注一个很小的功能函数,证明它是正确的: 每个测试单元必须是完全独立的,必须能单独运行.这样意味着每一个测试方法必须重新加载数据,执行完毕后做一些清理工作.通常通过 ...
- Android开源测试框架学习
近期因工作需要,分析了一些Android的测试框架,在这也分享下整理完的资料. Android测试大致分三大块: 代码层测试 用户操作模拟,功能测试 安装部署及稳定性测试 代码层测试 对于一般java ...
随机推荐
- Oracle11g R2学习系列 之五回闪
Oracle里面有一个回闪的操作,这个貌似sql server是没有的.要使用这个功能,需要用到两个时间内部函数 TIMESTAMP和TO_TIMESTAMP.其中,函数TO_TIMESTAMP的语法 ...
- Meta 整合
Meta 整合:http://segmentfault.com/a/1190000002407912
- Python核心编程(第九章)--文件和输入输出
文件内建函数: open()函数提供了初始化输入/输出操作的通用接口 open()基本语法:file_object = open(filename,access_mode='r',buffering= ...
- 当list中有中文,打印的时候显示为字符编码的问题
当list中有中文时,print list显示的会是字符编码,比如: 用str()当然也不行: 在不安装其他包的情况下,目前我知道的解决办法是使用decode('string_escape'),如下:
- debian系统下安装ssh服务
它是什么?? SSH 为 Secure Shell 的缩写,简单地说,SSH 为建立在应用层基础上的安全协议.SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议.利用 SSH 协议可 ...
- Java中的日期处理类
在Java中可以使用Date类和Calendar类来处理日期 但是Date类很多方法都过时了,推荐使用Canlendar类来处理日期,并对日期的格式化做了介绍.下面的部分将会逐一介绍 Date类 Ja ...
- a:hover和a:visited书写顺序的重要性
2a:hover和a:visited书写顺序的重要性今天在用a:hover属性的时候发现一个奇怪的问题,同一个页面里面有些链接的a:hover效果不能正常表现出来.链接的代码是一样,没有使用其它样式固 ...
- 《Programming WPF》翻译 第8章 3.Storyboard
原文:<Programming WPF>翻译 第8章 3.Storyboard Storyboard是动画的集合.如果你使用了标记,所有的动画必须要被定义在一个Storyboard中.(在 ...
- PowerShell_零基础自学课程_5_自定义PowerShell环境及Powershell中的基本概念
PowerShell_零基础自学课程_5_自定义PowerShell环境及Powershell中的基本概念 据我个人所知,windows下的cmd shell除了能够通过修改系统参数来对其中的环境变量 ...
- QT5.1.0,QT4.8.0以及VC2010、VC2012的测试对比
QT5.1.0,QT4.8.0以及VC2010.VC2012的交叉测试对比. 测试1: 用VC2012静态编译了QT5.1.0. 编译速度很慢,生成完成后,用VC2012+QT5.1.0进行程序生成, ...