c# – Rhino Mocks Partial Mock

我试图从一些现有的类测试逻辑.由于它们非常复杂并且在生产中,因此不可能重新考虑目前的类别.

我想要做的是创建一个模拟对象并测试一个内部调用一个非常难以模拟的方法方法.

所以我想为次要方法调用设置一个行为.

但是当我设置方法的行为时,方法代码调用并失败.

我是否遗漏了某些东西,或者这是不可能在没有重新分类的情况下进行测试?

我已经尝试了所有不同的模拟类型(Strick,Stub,Dynamic,Partial等),但是当我尝试设置行为时,它们都会调用方法.

using System;
using MbUnit.Framework;
using Rhino.Mocks;

namespace MMBusinessObjects.Tests
{
    [TestFixture]
    public class PartialMockExampleFixture
    {
        [Test]
        public void Simple_Partial_Mock_test()
        {
            const string param = "anything";

            //setup mocks
            MockRepository mocks = new MockRepository();


            var mockTestClass = mocks.StrictMock<TestClass>();

            //record beahvIoUr *** actualy call into the real method stub ***
            Expect.Call(mockTestClass.MethodToMock(param)).Return(true);

            //never get to here
            mocks.ReplayAll();

            //this is what i want to test
            Assert.IsTrue(mockTestClass.MethodIWantToTest(param));


        }

        public class TestClass
        {
            public bool MethodToMock(string param)
            {
                //some logic that is very hard to mock
                throw new NotImplementedException();
            }

            public bool MethodIWantToTest(string param)
            {
                //this method calls the 
                if( MethodToMock(param) )
                {
                    //some logic i want to test
                }

                return true;
            }
        }
    }
}

解决方法

MethodToMock不是虚拟的,因此无法模拟.您想要做的是使用部分模拟(我在类似于您的情况下完成它),但您想要模拟的方法必须是接口实现的一部分或标记为虚拟.否则,您无法使用Rhino.Mocks进行模拟.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...