做者: 梅桦 发表于 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(
""
));
}
·Record,Using方式
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
网站导航:博客园首页 我的主页 新闻 闪存 小组 博问 社区 知识库