gpt4 book ai didi

c# - 在 RhinoMocks 中模拟接受委托(delegate)的方法

转载 作者:太空狗 更新时间:2023-10-29 21:13:33 27 4
gpt4 key购买 nike

我有以下类(class):

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() 方法不感兴趣,但我有兴趣检查 Action1Action2 和其他操作调用时发送到 HandleFunction()..
我如何模拟 HandleFunction() 方法,同时避免它的内部逻辑,调用作为参数发送给它的代码?

最佳答案

因为您的被测单元很可能需要在继续之前调用委托(delegate),所以您需要从模拟中调用它。调用 helper 类的真实实现和 mock 实现还是有区别的。模拟不包括此“自定义逻辑”。 (如果你需要它,不要 mock 它!)

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();

关于c# - 在 RhinoMocks 中模拟接受委托(delegate)的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14559779/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com