RhinoMock入門(2)——Mock倉庫,指望

做者: 梅樺 發表於 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( "" ));
}

 

·RecordUsing方式

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

網站導航:博客園首頁  我的主頁  新聞  閃存  小組  博問  社區  知識庫

相關文章
相關標籤/搜索