做者: 梅樺 發表於 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
網站導航:博客園首頁 我的主頁 新聞 閃存 小組 博問 社區 知識庫