[英]RhinoMock - mocking multiple stubs for the same class
假设我有一个从我正在测试的MainClass
方法中调用的类。
public class MainClass
{
private readonly SubClass;
// constructor not shown
public method TestMethod()
{
var data = SubClass.MethodA();
// ...some code
var moreData = SubClass.MethodB(someOtherData);
// ...more code
}
}
使用 RhinoMock,我想为SubClass.MethodA()
创建一个存根以在测试中返回一组指定的数据,但是在调用SubClass.MethodB()
,我想调用原始实现。
我不想将SubClass'
两个方法分解为它们自己的类,因为它们适合SubClass
。 在 RhinoMock 中有没有办法在调用同一个类中的另一个方法(不是存根)时存根一个方法?
为此,我将使用提取和覆盖测试模式以及一个简单的存根。 虽然这并没有明确使用 Rhino,但可以用于您的场景。
如果您不想走这条路,请考虑通过构造函数、公共设置器或参数将子类注入 MainClass,然后您可以首先对模拟子类进行更多控制。
这个想法是创建一个子类存根可以覆盖的虚拟方法,以控制被测类的一部分的行为。
public class MainClass
{
private readonly SubClass _subClass;
// constructor not shown
public void TestMethod()
{
var data = SubClassMethodACall();
// ...some code
var someOtherData = "";
var moreData = _subClass.MethodB(someOtherData);
// ...more code
}
protected virtual string SubClassMethodACall()
{
return _subClass.MethodA();
}
}
public class SubClass
{
public string MethodA()
{
return null;
}
public string MethodB(string s)
{
return null;
}
}
namespace Tests.Unit
{
public class MainClassStub : MainClass
{
private readonly string _returnValueForMethodA;
public MainClassStub(string returnValueForMethodA)
{
_returnValueForMethodA = returnValueForMethodA;
}
protected override string SubClassMethodACall()
{
return _returnValueForMethodA;
}
}
[TestFixture]
public class TestClass
{
[Test]
public void TestMethod()
{
var mainClass = new MainClassStub("this is the test value returned");
//.. rest of test
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.