c# - Rhino Mocks 部分模拟

标签 c# unit-testing tdd mocking rhino-mocks

我正在尝试测试一些现有类的逻辑。目前无法重构这些类,因为它们非常复杂并且正在生产中。

我想做的是创建一个模拟对象并测试一个方法,该方法在内部调用另一个很难模拟的方法。

所以我只想为辅助方法调用设置一个行为。

但是当我设置方法的行为时,方法的代码被调用但失败了。

我是不是遗漏了什么或者如果不重构类就无法测试?

我尝试了所有不同的模拟类型(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 不是虚拟的,因此不能被模拟。使用部分模拟可以实现您想做的事情(我已经在与您类似的情况下完成了),但是您想要模拟的方法必须是接口(interface)实现的一部分或标记为虚拟。否则,您无法使用 Rhino.Mocks 模拟它。

关于c# - Rhino Mocks 部分模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2764929/

相关文章:

c# - PropertyGrid --> 从列表中选择对象<对象>

javascript - 来自 javascript 的带有发布数据的新 Razor 页面

c# - 如何在Azure移动Web应用程序中获取基本用户信息?

c++ - 使用 C++ 进行测试驱动开发

c# - 将 It.IsAny<> 分配给本地 var 不起作用?

c# - 具有可变输入参数数量的 MSBuild 自定义任务

java - 配置在测试中被忽略

javascript - 在我通过 props 的 React Enzyme 单元测试中设置状态

angular - 如何监视构造函数中调用的方法?

testing - 清除 Equals 方法时 RhinoMocks 异常