RhinoMock入门(2)——Mock仓库,期望-阿里云开发者社区

开发者社区> 云计算> 正文
登录阅读全文

RhinoMock入门(2)——Mock仓库,期望

简介: 这里介绍RhinoMock中的常用的类。   (一)MockRepository RhinoMock的主要的类,是Mock仓库,用于创建mock对象,录制,重放,验证等。 (1)创建Mock MockRepository mock = new MockRepository();  (2)创建mock对象 Mock的目的就是创建mock对象,然后期望,录制重放等。

这里介绍RhinoMock中的常用的类。

 

(一)MockRepository

RhinoMock的主要的类,是Mock仓库,用于创建mock对象,录制,重放,验证等。

1)创建Mock

MockRepository mock = new MockRepository();

 2)创建mock对象

Mock的目的就是创建mock对象,然后期望,录制重放等。创建mock对象有很多方法,以前的版本中通过:

 

MockRepository fac = new MockRepository();
var customer 
= fac.CreateMock<ICustomer>();

来进行,CreateMock方法已经过时,工厂方法来进行:

MockRepository fac = new MockRepository();
var customer 
= fac.StrictMock<ICustomer>();

 

也可以通过静态工厂方法来创建:

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

 

博客园大道至简

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

转载请注明:博客园

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

其他文章