我有以下课程:
public class HelperClass { HandleFunction<T>(Func<T> func) { // Custom logic here func.Invoke(); // Custom logic here } // The class i want to test public class MainClass { public readonly HelperClass _helper; // Ctor MainClass(HelperClass helper) { _helper = helper; } public void Foo() { // Use the handle method _helper.HandleFunction(() => { // Foo logic here: Action1(); Action2(); //etc.. } } }
我只想测试MainClass.我在测试中使用RhinoMocks来模拟HelperClass.
问题是,虽然我对测试HandleFunction()方法不感兴趣,但我有兴趣检查Action1,Action2和其他在调用时发送给HandleFunction()的动作.
我如何模拟HandleFunction()方法,同时避免它的内部逻辑,调用作为参数发送给它的代码?
解决方法
因为您的被测单元很可能需要在继续之前调用委托,所以您需要从模拟中调用它.调用辅助类的实际实现和模拟实现之间仍然存在差异.模拟不包括这个“自定义逻辑”. (如果你需要,不要嘲笑它!)
IHelperClass helperMock = MockRepository.GenerateMock<IHelperClass>(); helperMock .Stub(x => x.HandleFunction<int>()) .WhenCalled(call => { var handler = (Func<int>)call.Argument[0]; handler.Invoke(); }); // create unit under test,inject mock unitUnderTest.Foo();