我正在尝试测试一些现有类的逻辑。目前无法重构这些类,因为它们非常复杂并且正在生产中。
我想做的是创建一个模拟对象并测试一个方法,该方法在内部调用另一个很难模拟的方法。
所以我只想为辅助方法调用设置一个行为。
但是当我设置方法的行为时,方法的代码被调用但失败了。
我是不是遗漏了什么或者如果不重构类就无法测试?
我尝试了所有不同的模拟类型(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/