gpt4 book ai didi

c# - 改进模拟代表

转载 作者:太空宇宙 更新时间:2023-11-03 14:13:08 26 4
gpt4 key购买 nike

我正在使用 Rhino Mocks。我有一个数据存储库,它的一小部分是这样定义的,

interface IDataRepository
{
void GetCurrentUserId(Action<int?> callback);
}

这是在 silverlight RIA 服务应用程序的客户端,因此我们有一个 Action 回调。一旦在服务器上完成操作并有结果,这将回调。

为了对调用该方法的东西进行单元测试,我最终这样做了,

private delegate void GetCurrentUserIdDelegate(Action<int?> callback);

private void GetCurrentUserId(Action<int?> callback)
{
callback.Invoke(10);
}

[TestMethod]
public void TestBlah()
{
var mockRepository = MockRepository.GenerateMock<IDataRepository>();

mockRepository.Expect(r => r.GetCurrentUserId(null)).IgnoreArguments().Do(new GetCurrentUserIdDelegate(GetCurrentUserId));
}

它工作正常,但看起来很冗长。有没有更简洁的方法呢?

我将不得不为 IDataRepository 接口(interface)中具有回调的每个方法定义一个委托(delegate)。对我来说,这似乎有点困惑,难以维护等。

也许有一种无需定义委托(delegate)的内联方式?

最佳答案

您传递的委托(delegate)应该与模拟方法具有相同的签名,因此在您的情况下您可以使用 Action<Action<int?>> :

mockRepository
.Expect(r => r.GetCurrentUserId(null))
.IgnoreArguments()
.Do(new Action<Action<int?>>(act => { act(10); }));

关于c# - 改进模拟代表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7197509/

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