zoukankan      html  css  js  c++  java
  • RhinoMock入门——Mock仓库,期望

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

  • 相关阅读:
    【wikioi】1014 装箱问题
    石子合并
    我的Linux对拍脚本
    【搬运工】NOIP吧置顶贴
    [LeetCode] 237. Delete Node in a Linked List 删除链表的节点
    [LeetCode] 316. Remove Duplicate Letters 移除重复字母
    [LeetCode] 82. Remove Duplicates from Sorted List II 移除有序链表中的重复项 II
    [LeetCode] 83. Remove Duplicates from Sorted List 移除有序链表中的重复项
    [LeetCode] 80. Remove Duplicates from Sorted Array II 有序数组中去除重复项 II
    [LeetCode] 26. Remove Duplicates from Sorted Array 有序数组中去除重复项
  • 原文地址:https://www.cnblogs.com/hyl8218/p/2063325.html
Copyright © 2011-2022 走看看