改进嘲弄代表
本文关键字:嘲弄 | 更新日期: 2023-09-27 18:06:53
我使用Rhino mock。我有一个数据存储库,它的一小部分是这样定义的,
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接口中具有回调的每个方法定义一个委托。对我来说,这看起来有点乱,很难维护,等等。
也许有一个内联的方式来做,而不需要定义委托?
您传递的委托应该具有与模拟方法相同的签名,因此在您的情况下,您可以使用Action<Action<int?>>
:
mockRepository
.Expect(r => r.GetCurrentUserId(null))
.IgnoreArguments()
.Do(new Action<Action<int?>>(act => { act(10); }));