作者: 梅桦 发表于 2010-05-10 15:16 原文链接 阅读: 82 评论: 0
(一)次序(Ordered)
在rhinomock中,可以按次序调用方法。默认条件下,方法调用没有顺序。如果按次序录制,那么在调用方法时必须按录制时相同的次序进行。
请看:
{
string ShowTitle( string str);
int Unid { get ; set ; }
string CustomerName { get ; set ; }
string Address { get ; set ; }
}
测试:
{
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);
}
当使用次序时:
{
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 void TestDelegate1()
{
MockRepository mocks = new MockRepository();
var oo = mocks.DynamicMock < DoThing > ();
oo( "" );
mocks.ReplayAll();
oo( "" );
mocks.VerifyAll();
}
有两个系统定义的委托Func和Action
前是带返回值的委托,后者不带返回值,现在通过Action来实现上例
public void TestDelegate2()
{
MockRepository mocks = new MockRepository();
var oo = mocks.DynamicMock < Action < string >> ();
oo( "" );
mocks.ReplayAll();
oo( "" );
mocks.VerifyAll();
}
再来一个Func,即带返回值的委托的例子:
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( "" ));
}
再来一个例子:
{
Func < string , string > _fun;
public Customer(Func < string , string > fun)
{
_fun = fun;
}
public void DoSomething( string strMsg)
{
Console.WriteLine(_fun(strMsg));
}
}
测试:
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
![](https://i-blog.csdnimg.cn/blog_migrate/f1d6da6a3bf622e753008492b1344a08.jpeg)
最新新闻:
· 电子商务网站之信任度(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
网站导航:博客园首页 个人主页 新闻 闪存 小组 博问 社区 知识库