RhinoMock入门(4)——次序和委托
(一)次序(Ordered)
在rhinomock中,可以按次序调用方法。默认条件下,方法调用没有顺序。如果按次序录制,那么在调用方法时必须按录制时相同的次序进行。
请看:
{
string ShowTitle(string str);
int Unid { get; set; }
string CustomerName { get; set; }
string Address { get; set; }
}
测试:
{
MockRepository mocks = new MockRepository();
ICustomer customer = mocks.StrictMock<ICustomer>();
//默认条件下是没顺序的
Expect.Call(customer.Unid).Return(1);
Expect.Call(customer.CustomerName).Return("宋江");
Expect.Call(customer.Address).Return("山东");
mocks.ReplayAll();
Assert.AreEqual("宋江", customer.CustomerName);
Assert.AreEqual(1, customer.Unid);
Assert.AreEqual("山东", customer.Address);
}
当使用次序时:
{
MockRepository mocks = new MockRepository();
ICustomer customer = mocks.StrictMock<ICustomer>();
using (mocks.Ordered())
{
Expect.Call(customer.Unid).Return(1);
Expect.Call(customer.CustomerName).Return("宋江");
Expect.Call(customer.Address).Return("山东");
}
mocks.ReplayAll();
Assert.AreEqual("宋江", customer.CustomerName);
Assert.AreEqual(1, customer.Unid);
Assert.AreEqual("山东", customer.Address);
}
这时,如果调用时没有按期望时的次序进行,那就会出错,抛出异常。
这种次序可以灵活使用,例如可以次序一个mock,然后期望条件达到后,再不按次序进行。注意:在进行回播前要退出次序。
(二)模拟委托
先定义委托:
然后模拟委托:
public void TestDelegate1()
{
MockRepository mocks = new MockRepository();
var oo = mocks.DynamicMock<DoThing>();
oo("");
mocks.ReplayAll();
oo("");
mocks.VerifyAll();
}
有两个系统定义的委托Func<TResult>和Action<T>
前是带返回值的委托,后者不带返回值,现在通过Action<T>来实现上例
public void TestDelegate2()
{
MockRepository mocks = new MockRepository();
var oo = mocks.DynamicMock<Action<string>>();
oo("");
mocks.ReplayAll();
oo("");
mocks.VerifyAll();
}
再来一个Func,即带返回值的委托的例子:
public void TestDelegateFunc()
{
MockRepository mocks = new MockRepository();
var oo = mocks.DynamicMock<Func<string, string>>();
Expect.Call(oo("")).Return("abc");
mocks.ReplayAll();
Assert.AreEqual("abc", oo(""));
}
再来一个例子:
{
Func<string, string> _fun;
public Customer(Func<string, string> fun)
{
_fun = fun;
}
public void DoSomething(string strMsg)
{
Console.WriteLine(_fun(strMsg));
}
}
测试:
public void TestDelegateFunc()
{
MockRepository mocks = new MockRepository();
var oo = mocks.DynamicMock<Func<string, string>>();
Expect.Call(oo("")).Return("abc");
mocks.ReplayAll();
var customer = new Customer(oo);
customer.DoSomething("");
}
于对这两种委托请见:http://www.cnblogs.com/jams742003/archive/2009/10/31/1593393.html
转载于:https://www.cnblogs.com/jams742003/archive/2010/05/10/1731767.html
RhinoMock入门(4)——次序和委托相关推荐
- RhinoMock入门(7)——Do,With和Record-playback
2019独角兽企业重金招聘Python工程师标准>>> 作者: 梅桦 发表于 2010-05-11 15:50 原文链接 阅读: 86 评论: 0 (一)Do(delegate) 有 ...
- RhinoMock入门(6)——安装结果和约束
(一)安装结果(SetupResult) 有时候在模拟对象中需要一个方法的返回值,而不在意这个方法是否被调用.就可以通过安装结果(SetupRestult)来设置返回值,而绕开期望安装,且可以使用多次 ...
- C#入门面向对象编程(委托的使用)
委托的概念 一.了解委托(delegate) 1.委托是一种全新的面向对象语言特性,运行在.NET平台 2.基于委托,开发事件驱动程序变得非常简单 3.使用委托可以大大简化多线程的难度 二.理解委托 ...
- RhinoMock入门(3)——4种Mock类型
2019独角兽企业重金招聘Python工程师标准>>> 作者: 梅桦 发表于 2010-05-10 11:15 原文链接 阅读: 143 评论: 1 MockRespository有 ...
- 文献阅读与写作(一)
转载自:http://www.dxy.cn/bbs/topic/8784499?from=recommendhttp://blog.sciencenet.cn/blog-1089082-904345. ...
- [ASP.NET入门随想七]主角与配角——OO思想的多态、接口与委托
[ASP.NET入门随想七]主角与配角 --OO思想的多态.接口与委托 曾几何时,我们的父辈接受到的对美好生活的描绘是:"楼上楼下.电灯电话",三十年过去了,电灯电话早已已成为我们 ...
- 委托(C#入门详解学习笔记)
委托(C#入门详解学习笔记) 几个概念 什么是委托 委托的声明(自定义委托) 委托的常规使用 通用泛型委托类型的简单使用(Func和Action) 委托的高级使用 多播委托 委托的异步调用 使用接口取 ...
- C#语言入门详解笔记(9)—P19 委托详解
C#语言入门详解_哔哩哔哩_bilibiliC#语言入门详解搬运,随youtube上进度更新.刘老师的C#视频教程到30集就告一段落了,感谢刘老师在这5年间的付出.能上youtube的同学可以去刘老师 ...
- 【详细】【转】C#中理解委托和事件 事件的本质其实就是委托 RabbitMQ英汉互翼(一),RabbitMQ, RabbitMQ教程, RabbitMQ入门...
[详细][转]C#中理解委托和事件 文章是很基础,但很实用,看了这篇文章,让我一下回到了2016年刚刚学委托的时候,故转之! 1.委托 委托类似于C++中的函数指针(一个指向内存位置的指针).委托是C ...
最新文章
- 基于串级PID的直立车控制算法研究
- 面临找工作,要记住给自己的这些话。
- luoguP2657 [SCOI2009]windy数
- 强化学习笔记4:强化学习分类
- 55种数据可视化开源工具_4种开源工具让我的创业起步
- 把结构用二进制方式写入文件,并读出来[转]
- python如何执行代码漏洞_任意代码执行漏洞
- 人工智能TensorFlow工作笔记004---还记得标准差嘛_标准差的由来
- Spring-beans-BeanFactoryPostProcessor
- 《NLTK基础教程——用NLTK和Python库构建机器学习应用》——2.8 罕见词移除
- 单线程多线程_理解线程,就会由单线程向多线程进军
- 《Perl语言入门》
- android imagebutton 设置边框,【Android技巧】ImageButton 去边框 添加按下效果
- Vue表情包输入组件
- Word插入脚注后分节符自动变成分页符解决办法
- 如何安装和使用easypanel
- 第四周day19-三剑客之awk
- Linux 2.6内核的设备模型
- 月薪3000与月薪30000的文案区别
- scrapy的spider中为什么使用yield
热门文章
- PHP笔记-AES加解密(PHP7)
- Qt文档阅读笔记-QLatin1String解析及文本段跨行赋值
- SpringShell文档阅读笔记-SpringShell的基本使用
- Qt工作笔记-对QObject::connect函数进一步认识(重载)
- C++工作笔记-map有自动排序的功能
- php集成环境还需要mysql吗_是选择php集成环境好还是分开安装的原生版好
- ac自动机 匹配最长前缀_别再暴力匹配字符串了,高效的KMP,才是真的香
- 打开mysql的远程连接_开启mysql的远程访问权限
- 突破5G壁垒,睿至科技集团以技术实力赋能产业发展
- python网盘系统_python做系统