RhinoMock入门(4)——次序和委托

简介: (一)次序(Ordered) 在rhinomock中,可以按次序调用方法。默认条件下,方法调用没有顺序。如果按次序录制,那么在调用方法时必须按录制时相同的次序进行。   请看: public interface ICustomer{   string ShowTitle(string ...

(一)次序(Ordered

rhinomock中,可以按次序调用方法。默认条件下,方法调用没有顺序。如果按次序录制,那么在调用方法时必须按录制时相同的次序进行。

 

请看:

public   interface  ICustomer
{
   string  ShowTitle( string  str);
   int  Unid {  get set ; }
   string  CustomerName {  get set ; }
   string  Address {  get set ; }
}

 

测试:

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);
}

 

 

当使用次序时:

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);
}

 

这时,如果调用时没有按期望时的次序进行,那就会出错,抛出异常。

这种次序可以灵活使用,例如可以次序一个mock,然后期望条件达到后,再不按次序进行。注意:在进行回播前要退出次序。

 

(二)模拟委托

先定义委托:

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<TResult>Action<T>

前是带返回值的委托,后者不带返回值,现在通过Action<T>来实现上例

[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

 

 

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

目录
相关文章
|
编译器 C语言 C++
一分钟搞懂什么是this指针(未涉及静态成员和函数)
一分钟搞懂什么是this指针(未涉及静态成员和函数)
|
C语言
C语言函数和指针的关系之二(未完)
C语言函数和指针的关系之二(未完)
51 0
|
设计模式 JavaScript 前端开发
从【if...else...】到【责任链】再到【composeAOP】,顺带把【传参】解决了~
从【if...else...】到【责任链】再到【composeAOP】,顺带把【传参】解决了~
从【if...else...】到【责任链】再到【composeAOP】,顺带把【传参】解决了~
|
Java Scala 开发者
特质构造的顺序|学习笔记
快速学习特质构造的顺序。
|
Java 中间件 程序员
static关键字真能提高Bean的优先级吗?答:真能(上)
static关键字真能提高Bean的优先级吗?答:真能(上)
static关键字真能提高Bean的优先级吗?答:真能(上)
|
存储 安全 Java
static关键字真能提高Bean的优先级吗?答:真能(下)
static关键字真能提高Bean的优先级吗?答:真能(下)
static关键字真能提高Bean的优先级吗?答:真能(下)
(二十)看完这篇类的实例化顺序,考执行顺序的面试题就难不倒你了
一段代码的执行顺序经常会放到面试题或者笔试题中,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,它们的执行顺序,关于这一类题目只要了解了类的实例化顺序,就不会再成为问题。先看一下下面的面试题
C#编程:如何理解委托-2
C#编程:如何理解委托-2
109 0
C#(二十五)之C#对象比较
本篇内容记录了比较对象的方法、重写实例Equals方法。
143 0
C#(二十五)之C#对象比较
|
Java Spring
static关键字真能提高Bean的优先级吗?答:真能(中)
static关键字真能提高Bean的优先级吗?答:真能(中)