RhinoMock:为同一类创建存根时保留原方法实现
当然支持!用Rhino Mocks的部分模拟就能搞定
完全不需要拆分SubClass的两个方法,Rhino Mocks的**部分模拟(Partial Mocks)**特性正好匹配你的需求——可以对指定方法创建存根返回测试数据,同时保留其他方法的原始实现逻辑。
具体实现步骤
- 创建
SubClass的部分模拟实例:这种模拟会保留类中大部分方法的原始行为,只允许你修改指定方法的逻辑。 - 对
MethodA()设置存根,指定测试返回值。 - 将这个模拟实例注入到
MainClass中,执行测试即可——此时MainClass调用MethodA()会使用你设置的存根数据,调用MethodB()则会执行原始实现。
代码示例
// 1. 生成SubClass的部分模拟 var subClassPartialMock = MockRepository.GeneratePartialMock<SubClass>(); // 2. 为MethodA设置存根,返回自定义测试数据 subClassPartialMock.Stub(x => x.MethodA()).Return("测试用返回值"); // 3. 注入到MainClass中进行测试 var mainClassUnderTest = new MainClass(subClassPartialMock); mainClassUnderTest.TargetMethod(); // 内部调用subClassPartialMock.MethodA()用存根,MethodB()走原始逻辑
注意事项
- 确保
SubClass不是密封类(sealed),且MethodA是虚方法(virtual)——Rhino Mocks需要通过生成代理子类的方式实现部分模拟,非虚方法或密封类无法被拦截修改。 - 如果
MethodB内部会调用MethodA,此时调用的也会是你设置的存根版本(因为MethodA是虚方法,代理类会拦截这个调用)。如果需要让MethodB内部调用原始的MethodA,可以通过CallOriginalMethod()方法调整,但这应该不是你的需求场景。
内容的提问来源于stack exchange,提问作者mche
相关产品推荐
相关产品推荐

