作者: 梅桦 发表于 2010-05-08 12:57 原文链接 阅读: 196 评论: 0
这里介绍RhinoMock中的常用的类。
(一)MockRepository
RhinoMock的主要的类,是Mock仓库,用于创建mock对象,录制,重放,验证等。
(1)创建Mock
(2)创建mock对象
Mock的目的就是创建mock对象,然后期望,录制重放等。创建mock对象有很多方法,以前的版本中通过:
var customer = fac.CreateMock < ICustomer > ();
来进行,CreateMock方法已经过时,工厂方法来进行:
var customer = fac.StrictMock < ICustomer > ();
也可以通过静态工厂方法来创建:
(3)录制
所有的mock框架都使用Record/Replay模式,但有些是显示的,有些是隐式的,而RhinoMock就是显示的。
·Record/Replay传统的录制与重放:
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方式
{
MockRepository fac = new MockRepository();
var customer = fac.StrictMock < ICustomer > ();
using (fac.Record())
{
customer.Expect(p => p.ShowTitle( "" )).Return( "" );
}
Assert.AreEqual( "" , customer.ShowTitle( "" ));
}
·通过静态工厂方法创建mock对象:
{
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)
例:
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表达式方式
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方式
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);
}
![](https://i-blog.csdnimg.cn/blog_migrate/17a5f41114017dc67967e98f1bc9365f.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
网站导航:博客园首页 个人主页 新闻 闪存 小组 博问 社区 知识库