在JustMock自动模拟中使用ReturnsAsync的方法咨询
JustMock MockingContainer 异步返回简化方案
问题说明
使用JustMock标准模拟时支持.ReturnsAsync()方法,但在MockingContainer<T>自动模拟场景下,只能通过Task.FromResult<T>()手动包装返回值,语法繁琐:
service .Arrange<IRepository>(r => r.SomeAsyncMethod("input")) .Returns(Task.FromResult<ISomeModel>(resultModel));
希望实现类似标准模拟的简化语法:
service .Arrange<IRepository>(r => r.SomeAsyncMethod("input")) .ReturnsAsync(resultModel);
解决方案
目前JustMock官方的MockingContainer<T> API并未内置ReturnsAsync扩展方法,但可以通过自定义扩展方法实现该简化语法:
自定义ReturnsAsync扩展
using Telerik.JustMock; using Telerik.JustMock.Core; public static class MockingContainerExtensions { public static IReturnsResult<TContainer> ReturnsAsync<TContainer, TResult>( this IReturns<TContainer, Task<TResult>> arrangement, TResult result) { return arrangement.Returns(Task.FromResult(result)); } }
添加该扩展后,即可直接使用.ReturnsAsync(resultModel)的简化写法,完全符合需求。
补充说明
如果不想自定义扩展,也可以利用C#的类型推断简化Task.FromResult的写法:
service .Arrange<IRepository>(r => r.SomeAsyncMethod("input")) .Returns(Task.FromResult(resultModel));
但自定义扩展的语法更贴近标准模拟的使用习惯,体验更一致。
内容的提问来源于stack exchange,提问作者Drew Antonich
相关产品推荐
相关产品推荐

