我有以下课程:
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();
原文地址:https://www.jb51.cc/csharp/92263.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。