做者: 梅桦 发表于 2010-05-10 15:16 原文连接 阅读: 82 评论: 0html
(一)次序(Ordered)程序员
在rhinomock中,能够按次序调用方法。默认条件下,方法调用没有顺序。若是按次序录制,那么在调用方法时必须按录制时相同的次序进行。测试
请看:网站
public
interface
ICustomer
{
string
ShowTitle(
string
str);
int
Unid {
get
;
set
; }
string
CustomerName {
get
;
set
; }
string
Address {
get
;
set
; }
}
测试:spa
public
void
TestNoOrder()
{
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);
}
当使用次序时:code
public
void
TestOrder()
{
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);
}
这时,若是调用时没有定期望时的次序进行,那就会出错,抛出异常。orm
这种次序能够灵活使用,例如能够次序一个mock,而后指望条件达到后,再不按次序进行。注意:在进行回播前要退出次序。视频
(二)模拟委托htm
先定义委托:blog
public
delegate
void
DoThing(
string
strMsg);
而后模拟委托:
[Test]
public
void
TestDelegate1()
{
MockRepository mocks
=
new
MockRepository();
var oo
=
mocks.DynamicMock
<
DoThing
>
();
oo(
""
);
mocks.ReplayAll();
oo(
""
);
mocks.VerifyAll();
}
有两个系统定义的委托Func和Action
前是带返回值的委托,后者不带返回值,如今经过Action来实现上例
[Test]
public
void
TestDelegate2()
{
MockRepository mocks
=
new
MockRepository();
var oo
=
mocks.DynamicMock
<
Action
<
string
>>
();
oo(
""
);
mocks.ReplayAll();
oo(
""
);
mocks.VerifyAll();
}
再来一个Func,即带返回值的委托的例子:
[Test]
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(
""
));
}
再来一个例子:
public
class
Customer
{
Func
<
string
,
string
>
_fun;
public
Customer(Func
<
string
,
string
>
fun)
{
_fun
=
fun;
}
public
void
DoSomething(
string
strMsg)
{
Console.WriteLine(_fun(strMsg));
}
}
测试:
[Test]
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
评论: 0 查看评论 发表评论
程序员找工做,就在博客园
最新新闻:
· 电子商务网站之信任度(2010-10-09 17:02)
· 马云:管理的核心在于“抓住人性的本真”(2010-10-09 16:52)
· 另外一 Windows Phone Live 主页截图现身 Windows Phone 7 视频(2010-10-09 16:38)
· 谷歌首名员工:公司成功归结于运气不错(2010-10-09 16:32)
· 神奇小子Geohot带着“limera1n”回归(2010-10-09 16:29)
编辑推荐:远离.NET
网站导航:博客园首页 我的主页 新闻 闪存 小组 博问 社区 知识库