做者: 梅樺 發表於 2010-05-08 12:57 原文連接 閱讀: 196 評論: 0html
這裏介紹RhinoMock中的經常使用的類。程序員
(一)MockRepository框架
RhinoMock的主要的類,是Mock倉庫,用於建立mock對象,錄製,重放,驗證等。網站
(1)建立Mockspa
MockRepository mock
=
new
MockRepository();
(2)建立mock對象code
Mock的目的就是建立mock對象,而後指望,錄製重放等。建立mock對象有不少方法,之前的版本中經過: orm
MockRepository fac
=
new
MockRepository();
var customer
=
fac.CreateMock
<
ICustomer
>
();
來進行,CreateMock方法已通過時,工廠方法來進行:視頻
MockRepository fac
=
new
MockRepository();
var customer
=
fac.StrictMock
<
ICustomer
>
();
也能夠經過靜態工廠方法來建立:htm
var customer
=
MockRepository.GenerateMock
<
ICustomer
>
();
(3)錄製對象
全部的mock框架都使用Record/Replay模式,但有些是顯示的,有些是隱式的,而RhinoMock就是顯示的。
·Record/Replay傳統的錄製與重放:
[Test]
public
void
TestRR()
{
MockRepository fac
=
new
MockRepository();
var customer
=
fac.StrictMock
<
ICustomer
>
();
customer.Expect(p
=>
p.ShowTitle(
""
)).Return(
""
);
customer.Replay();
Assert.AreEqual(
""
, customer.ShowTitle(
""
));
}
·Record,Using方式
public
void
TestRR()
{
MockRepository fac
=
new
MockRepository();
var customer
=
fac.StrictMock
<
ICustomer
>
();
using
(fac.Record())
{
customer.Expect(p
=>
p.ShowTitle(
""
)).Return(
""
);
}
Assert.AreEqual(
""
, customer.ShowTitle(
""
));
}
·經過靜態工廠方法建立mock對象:
public
void
TestRR()
{
var customer
=
MockRepository.GenerateMock
<
ICustomer
>
();
customer.Expect(p
=>
p.ShowTitle(
""
)).Return(
""
);
Assert.AreEqual(
""
, customer.ShowTitle(
""
));
}
(4)驗證
用於驗證mock對象的指望是否成立。
·Verify,用於驗證mock對象的全部指望是否知足
·VerifyAll,用於驗證全部mock對象的全部指望是否知足
(二)Expect類
爲有返回值的類的方法設置指望
Call:爲方法或屬性提供指望
·Call(T ignored)
·Call(Action actionToExecute)
例:
[Test]
public
void
TestCall()
{
MockRepository mock
=
new
MockRepository();
var mockObject
=
mock.StrictMock
<
ICustomer
>
();
Expect.Call(mockObject.ShowTitle(
string
.Empty)).Return(
"
不能爲空
"
);
Expect.Call(mockObject.Unid).Return(
30
);
mock.ReplayAll();
Assert.AreEqual(
"
不能爲空
"
, mockObject.ShowTitle(
""
));
Assert.AreEqual(
30
, mockObject.Unid);
}
看lambda表達式方式
[Test]
public
void
TestCall()
{
MockRepository mock
=
new
MockRepository();
var mockObject
=
mock.StrictMock
<
ICustomer
>
();
mockObject.Expect(p
=>
p.ShowTitle(
""
)).Return(
"
不能爲空
"
);
mockObject.Expect(p
=>
p.Unid).Return(
30
);
mock.ReplayAll();
Assert.AreEqual(
"
不能爲空
"
, mockObject.ShowTitle(
""
));
Assert.AreEqual(
30
, mockObject.Unid);
}
再來看Using方式
[Test]
public
void
TestCallUsing()
{
MockRepository mock
=
new
MockRepository();
var mockObject
=
mock.StrictMock
<
ICustomer
>
();
using
(mock.Record())
{
mockObject.Expect(p
=>
p.ShowTitle(
""
)).Return(
"
不能爲空
"
);
mockObject.Expect(p
=>
p.Unid).Return(
30
);
}
Assert.AreEqual(
"
不能爲空
"
, mockObject.ShowTitle(
""
));
Assert.AreEqual(
30
, mockObject.Unid);
}
評論: 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
網站導航:博客園首頁 我的主頁 新聞 閃存 小組 博問 社區 知識庫