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

网站导航:博客园首页  我的主页  新闻  闪存  小组  博问  社区  知识库

相关文章
相关标签/搜索